更新:
要观察另一个线程中的异常,您需要使用
Task
,排队到
Dispatcher
线程(使用)
TaskScheduler.FromCurrentSynchronizationContext
,然后等待,例如:
var ui = TaskScheduler.FromCurrentSynchronizationContext();
Action doit = () =>
{
var error = Task.Factory.StartNew(
() => { throw new InvalidOperationException("test"); },
CancellationToken.None,
TaskCreationOptions.None,
ui);
try {
error.Wait();
} catch (Exception ex) {
System.Diagnostics.Trace.WriteLine(ex);
}
};
doit.BeginInvoke(null, null);
更新(再次):
因为您的目标是一个可重用的组件,所以我建议您转到
任务
-基于接口或其他基于
SynchronizationContext
如
event-based asynchronous pattern
,而不是基于
调度员
或
ISynchronizeInvoke
.
调度员
-基于组件仅在WPF/Silverlight上工作;
同步调用
-基于组件仅在Windows窗体上工作。
行绪
-基于组件将透明地与WPF或Windows窗体以及(稍微多一些工作)ASP.NET、控制台应用程序、Windows服务等一起工作。
基于事件的异步模式是旧的推荐写入方式
行绪
-基于组件;它仍然适用于.NET 3.5时代的代码。但是,如果您使用的是.NET 4,那么任务并行库就更加灵活、干净和强大了。这个
任务计划程序.fromCurrentSynchronizationContext
使用
行绪
下面是编写需要这种同步的可重用组件的新方法。