2010-02-22 82 views
1

我在写一篇Prism应用程序中的复合事件处理程序时遇到了一个奇怪的结果。我创建了事件处理程序,并放在一个例外声明,以验证处理程序被称为:棱镜:异常处理?

public void OnDateSelected(DateTime selectedDate) 
{ 
    // Temporary code 
    throw new ApplicationException("Not implemented yet."); 
} 

我运行应用程序,并引发事件。事件处理程序被调用,但异常不会停止执行。它被写入输出窗口,应用程序退出处理程序,但执行继续。在任何地方都没有try-catch块,为什么中断执行不会异常呢?谢谢。

回答

5

我们在这里发现了问题。我们正在使用棱镜库的v2.2。在BackgroundEventSubscription类中,当发布事件时,将创建并调用后台工作器。永远不会处理RunWorkerCompleted委托,因此从不会在任何地方拾取例外。棱镜库也没有给最终用户一个简单的方法来在这个版本中应用他们自己的委托。解决方案是编译自己的一组库并使用线程池(这是我们所做的)或者覆盖您自己的CompositePresentationEvent类的Subscribe,并使用您自己的事件订阅类来完成您所需要的。

棱柱v4库已经解决了这个问题,因为它使用线程池,所以任何未处理的异常都会冒泡到域未处理的异常处理程序(如果指定了一个)。

谢谢。