protected virtual void OnWorkerException(ResourceExceptionEventArgs e) { ResourceExceptionEventHandler handler; lock (eventLock) { handler = workerException; } if (handler != null) handler(this, e); }
public void HandleResourceException(ResourceExceptionEventArgs e) { lock (completed) { Pause(); internalException = e.Exception; // Tell the world. OnWorkerException(e); // Wakeup any threads in WaitAll and let them throw the exception. Monitor.PulseAll(completed); } }
[Test] public void WorkThreadException() { wteArgs = null; worklist = new WorkQueue(); worklist.WorkerException += new ResourceExceptionEventHandler(worklist_WorkThreadException); worklist.CompletedWorkItem += new WorkItemEventHandler(te_CompletedWorkItem); worklist.Add(new SimpleWork(1)); try { worklist.WaitAll(); } catch (Exception) { } AssertNotNull("WorkThreadException event", wteArgs); AssertNotNull(wteArgs.Exception); AssertEquals("testing exceptions on another thread.", wteArgs.Exception.Message); }
[Test] public void WorkThreadException() { wteArgs = null; IWorkItem work = new FailedWork(); work.State = WorkItemState.Scheduled; WorkThreadPool.Default.ThreadException += new ResourceExceptionEventHandler(OnWorkThreadException); WorkThreadPool.Default.BeginWork(work); while (wteArgs == null) { Thread.Sleep(TimeSpan.FromMilliseconds(50)); } AssertNotNull("WorkThreadException event", wteArgs); AssertNotNull(wteArgs.Exception); AssertEquals("WorkThreadException testing.", wteArgs.Exception.Message); }
private void m_work_WorkerException(object sender, ResourceExceptionEventArgs e) { Application.OnThreadException(e.Exception); }
private void worklist_WorkThreadException(object sender, ResourceExceptionEventArgs e) { wteArgs = e; }
void work_WorkerException(object sender, ResourceExceptionEventArgs e) { LogException(e.Exception.GetType().GetProperties(), e.Exception); }