我有以下代表
delegate void UpdateFileDelegate(long maxFileID);
我是从WinForms应用程序调用的,就像这样
UpdateFileDelegate FD = new UpdateFileDelegate(ClassInstance.UpdateFile);
FD.BeginInvoke(longIDNumber,null,null);
它异步运行,但是我的问题是如何知道方法何时完成执行,以便让最终用户知道?
更新:
由于下面的建议,以下代码可以解决问题。
同样,此article有助于使我了解我的代码实际在做什么。
delegate void UpdateFileDelegate(long maxFileID);
UpdateFileDelegate FB = new UpdateFileDelegate(ClassInstance.UpdateFile);
AsyncCallback callback = new AsyncCallback(this.CallBackMethod);
IAsyncResult result = FB.BeginInvoke(longIDNumber);
private void CallBackMethod(IAsyncResult result)
{
AsyncResult delegateResult = (AsyncResult)result;
UpdateFileDelegate fd = (UpdateFileDelegate)delegateResult.AsyncDelegate;
fd.EndInvoke(result);
MessageBox.Show("All Done!");
}
最佳答案
见Calling Synchronous Methods AsynchronouslyBeginInvoke
将返回一个IAsyncResult
,它使您可以通过多种不同的方式知道何时完成操作,例如使用其AsyncWaitHandle.WaitOne()
方法。这取决于您在做什么。
或者,您可以将回调方法的委托传递给BeginInvoke
。可以说这是最强大的策略,但有时却是过大的。