我想封装一个方法, 在这个方法里 首先创建一个异步方法,并告诉异步方法回调函数,然后在异步方法执行完毕后调用回调函数,这个回调函数应该能接收2个参数第一个参数是异步方法返回的值, 第二个参数是一开始就给定的我试着写了一下方法,但是是不能运行的 ,请教应该怎么实现我的想法呢
public static string GetData(string orgdata)
{
//DO EVERY THING
return orgdata ;
} private delegate string AsyncDelegate(string orgdata); public void GetAsyncData(string orgdata,Action<string,string> abc,string b)
{
AsyncDelegate dlgt = new AsyncDelegate(GetData); IAsyncResult ar = dlgt.BeginInvoke(orgdata, new AsyncCallback(abc), b); }
public void main()
{
string date =""; GetAsyncData(date , abc,"b");} private void abc(string a,string b)
{
conlog.Write(a+b);
}
public static string GetData(string orgdata)
{
//DO EVERY THING
return orgdata ;
} private delegate string AsyncDelegate(string orgdata); public void GetAsyncData(string orgdata,Action<string,string> abc,string b)
{
AsyncDelegate dlgt = new AsyncDelegate(GetData); IAsyncResult ar = dlgt.BeginInvoke(orgdata, new AsyncCallback(abc), b); }
public void main()
{
string date =""; GetAsyncData(date , abc,"b");} private void abc(string a,string b)
{
conlog.Write(a+b);
}
解决方案 »
- 如何用C#调用gcc编译程序并取得编译信息?
- C# Win ComboBox与DataGridView控件 怎么进行数据传递啊
- 几个类的实现问题?
- 求问正则表达式的处理方法
- 高手们来看看啦 ComboBox 相关
- 连接Mysql的问题 大家都近来看哦
- Winform程序应用了notifyicon托盘控件恢复窗口时出现的问题
- excel中的sheet复制的问题,高手都睡觉了吗?(在线等,解决的话给200分)
- 在循环里创建SqlDataAdapter 这样消耗的内存是多少呀?
- 如何在FORM最小化时作为一个小图标显示在屏幕右下角?
- 不知道为什么无法获得kuaidi100物流信息?还有其他方法吗?
- 如何用gettype的实现?
public class State
{
public string A;
public string B;
}
public static string GetData(string orgdata, State state)
{
//DO EVERY THING
state.A = orgdata;
return orgdata;
}
private void abc(IAsyncResult ar)
{
State state = ar.AsyncState as State;
Console.WriteLine(state.A + state.B);
}
private delegate string AsyncDelegate(string orgdata, State state); public void GetAsyncData(string orgdata, AsyncCallback abc, string b)
{
AsyncDelegate dlgt = new AsyncDelegate(GetData);
State state = new State() { B = b };
IAsyncResult ar = dlgt.BeginInvoke(orgdata, state, abc, state); }
回调函数一定是要IAsyncResult ar 做参数吗 ?能不能用普通的回调函数实现这个功能?
例如:
public static string GetData(string orgdata,Action<string,string> abc)然后在GetData内部最后返回前去执行abc方法,顺便将要返回的值传递给abc作为参数调用。
{
CAsyncOjb obj = new CAsyncOjb(GetData,b);
GetData.BeginInvoke(orgdata, new AsyncCallback(callback), obj);
}
private void callback(IAsyncResult ar)
{
string b = ((CAsyncOjb)ar.AsyncState).Bvalue;
string newOrgdata= ((CAsyncOjb)ar.AsyncState).GetData.EndInvoke(ar);
MessageBox.Show(newOrgdata + b);
} class CAsyncOjb
{
public CAsyncOjb(Func<string, string> getData, String bValue)
{
GetData = getData;
Bvalue = bValue;
}
public string Bvalue { get; private set; }
public Func<string, string> GetData { get; private set; }
}
调用
Func<string,string> GetData=new Func<string,string>(
r=>{
return r;
}
);
GetAsyncData("sports", GetData, "b");
abc方法必须要与 AsyncCallback 委托 相匹配。