public void RunWorkerAsync(object pArgument) { cancelPending = false; if (DoWork != null) { WorkerEventArgs _args = new WorkerEventArgs(pArgument); AsyncCallback _callback = new AsyncCallback(reportCompletion); //NOTE: ? why do we need ar here ? ar = DoWork.BeginInvoke(this, _args, _callback, _args); } }
private void reportCompletion(IAsyncResult pAsyncResult) { AsyncResult _asyncResult = (AsyncResult)pAsyncResult; DoWorkEventHandler _del = (DoWorkEventHandler)_asyncResult.AsyncDelegate; WorkerEventArgs _doWorkArgs = (WorkerEventArgs)pAsyncResult.AsyncState; object _result = null; Exception _error = null; try { _del.EndInvoke(pAsyncResult); _result = _doWorkArgs.Result; } catch (Exception _ex) { _error = _ex; } WorkCompletedEventArgs _completedArgs = new WorkCompletedEventArgs(_result, _error, _doWorkArgs.Cancel); onWorkerCompleted(_completedArgs); }