我有一个关于Dispatcher.CurrentDispatcher
静态属性的问题。如果我的理解是正确的,那么这个属性应该返回与该线程关联的调度器。我想如果我在同一个线程上调用两次Dispatcher.CurrentDispatcher
,我会收到相同的Dispatcher实例。这是真的?Dispatcher处理的异常UnhandledException处理程序在Dispatcher.Invoke语句中抛出异常时
我问这个问题,因为我遇到以下问题。在我的(巨)应用程序的启动我注册在主线程分派器异常处理程序是这样的:
Dispatcher.CurrentDispatcher.UnhandledException += UnhandledDispatcherExceptionHandler;
在不同的线程我试图抛出一个异常,这样以后:
Action exception =() =>
{
throw new Exception("myExceptionText");
};
myDispatcherInstance.Invoke(exception);
我在主线程中设置了myDispatcherInstance
到myDispatcherInstance
,但是从另一个但稍后在代码中执行的点。
所以我的问题是,我从Dispatcher.CurrentDispatcher
收到的实例是否可能与我首先收到的实例不同。在调试器中,我看到myDispatcherInstance.UnhandledException
不为空,但仍然异常不会在myDispatcherInstance
功能结束而只是被“抓”域中异常处理程序:
AppDomain.CurrentDomain.UnhandledException += UnhandledDomainExceptionHandler;
或者莫不是该Dispatcher.CurrentDispatcher.UnhandledExceptionhandler
是正确,但由于另一个原因,域异常处理程序被触发,调度程序异常处理程序简单不会在这种情况下触发?如果是这样,原因是什么?
'在我看到myDispatcherInstance.UnhandledException不为空,但仍然异常不会在myDispatcherInstance结束调试器'你说它不会在'if'子句中结束,而是跳到'else'子句中?换句话说,'myDispatcherInstance.Invoke(exception)'行永远不会到达? –
我编辑了我的问题,使其更清楚。不,它永远不会在else语句中结束。调度程序不为null,即使'myDispatcherInstance.UnhandledException'事件属性不为null。 – Sjoerd222888
这只是一个没有repro代码的猜谜游戏。非显而易见的失败模式是当您的UnhandledDispatcherExceptionHandler本身在异常时崩溃。 –