Я следующий делегатИспользование делегатов в 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