C# 如何将对象设置为AsyncState并将其传递到AsyncCallback方法
两个问题:C# 如何将对象设置为AsyncState并将其传递到AsyncCallback方法,c#,asynchronous,C#,Asynchronous,两个问题: 如何将参数传递给AsyncCallback方法 如何调用AsyncCallback方法 背景如下: 我正在.NETFramework 3.5中处理一个旧项目。我想创建一个异步方法,在不阻塞当前线程的情况下执行一些工作。由于该项目是一个旧版本Async Await关键字不可用,我计划执行所有并行工作,包括一些数据库查询和AsyncCallback方法中的api调用。我知道AsyncState可以用来传递参数。因为我需要多个参数,所以我计划将这些参数包含到一个对象中,并将该对象设置为As
AsyncCallback
方法AsyncCallback
方法 public Class ArgumentObject
{
public string A{get;set;}
public string B{get;set;}
...
}
public void CallBack(IAsyncResult result, ArgumentObject arObj)
{
Console.WriteLn(arObj.A);
Console.WriteLn(arObj.B);
}
下面是调用AsyncCallBack方法的代码
var argumentsObj=new ArgumentObject{ A="argument1", B="argument2"..};
AsyncCallback callback = (IAsyncResult result) => CallBack(result, argumentsObj);
// How do I know it is triggered? I set the break point into CallBack method, but it never goes to there.
欢迎您提出任何意见或更正。更新:
我终于找到了传递论点的方法。我使用委托并调用BeginInvoke方法
static int DoSomething(string s, int t)
{
Console.WriteLine(s+t.ToString());
return 0;
}// this is the delegate method, you can define it anyway.
public delegate int MyDelegate(string s, int t);
MyDelegate x = new MyDelegate(DoSomething);
AsyncCallback callback = new AsyncCallback(CallBack);
var argumentsObj=new ArgumentObject{ A="argument1", B="argument2"..};
IAsyncResult ar = x.BeginInvoke("hello", 12, callback, argumentsObj);
// in my case, the first two parameters are not important, only the last two are important.
现在,在回调方法中,我可以将AsyncState强制转换为参数对象:
var obj = (CallBackObj)result.AsyncState;
在回调方法中,不要忘记调用EndInvoke方法,以保证不会泄漏内存或句柄
MyDelegate x = (MyDelegate)((AsyncResult)result).AsyncDelegate;
x.EndInvoke(result);
很抱歉,未获取以下内容:
var obj=(CallBackObj)result.AsyncState代码>。。。无论如何,在我的例子中,当将此模式用于DuplexChannelFactory
功能时,我得到了无效的强制转换,因为IAsyncState属于System.ServiceModel.Dispatcher.MessageRpc
类型。不知道为什么,也不知道该怎么办。没有在互联网上的信息。