我有以下代表

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 Asynchronously

BeginInvoke将返回一个IAsyncResult,它使您可以通过多种不同的方式知道何时完成操作,例如使用其AsyncWaitHandle.WaitOne()方法。这取决于您在做什么。

或者,您可以将回调方法的委托传递给BeginInvoke。可以说这是最强大的策略,但有时却是过大的。

10-07 21:12