我正在使用 Remoting 执行一些 IPC 通信,并有以下问题:
当我调用委托(delegate)来收集服务器端数据时,收集 IAsyncResult 时是否可以在客户端上触发一个事件?
以下代码是 VC++ 代码,但 .net 代码是 .net 代码。
GetFileTextDelegate ^svd = gcnew GetFileTextDelegate(obj, &BaseRemoteObject::GetFileText);
IAsyncResult ^arValSet = svd->BeginInvoke(nullptr, nullptr);
String ^result = svd->EndInvoke(arValSet);
在此示例中,最后一行代码将仅锁定当前线程,直到 Invoke 完成。是否可以仅订阅“IAsyncResult_Completed”事件或类似事件?
谢谢
最佳答案
是的,有一个 good example在 MSDN 上使用 AsyncCallback
委托(delegate)执行此操作。
最简单的方法是在委托(delegate)上使用 BeginInvoke
并向其传递一个 AsynCallback
委托(delegate)的实例,以便在操作完成时调用。
在 C#(我比托管 C++ 更熟悉)中,您基本上会这样写:
// when the async operation completes, YourCallBackMethod will be run
AsyncCallback callback = new AsynCallback( YourCallBackMethod );
callAsynchronously.BeginInvoke( callback, null );
在回调方法中,您必须对异步运行的委托(delegate)调用 EndInvoke()
。最简单的方法是使用提供的 IAsyncResult
。
关于.net - 让 IAsyncResult 触发 "completed"事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372567/