我有以下的委托在C#中使用委托异步
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!");
}
如果代码决定不关心异步任务会发生什么(例如,因为用户点击了“取消”),但“取消”请求没有立即响应,那么正确的模式是什么?只需简单地安排其回调调用'EndInvoke'并死掉,然后放弃它(确定回调将保持活动状态,直到任务完成或处理取消请求,然后回调将执行并清理“IAsyncResult”? – supercat 2012-03-19 20:04:13