请考虑以下程序。它显示的行为如何(即异常会传播出事件处理程序)是一件“好事”?据我所知,它只能是坏的;意想不到的异常从他们不应该出现的函数中弹出。在我的特殊情况下,这是杀死线程。那么,在某些情况下,这种行为实际上是一件好事吗?这是否有理由说,让事件处理程序排除异常是不好的设计?为什么异常传播出事件处理程序?
static class Program {
static void Main()
{
Foo foo = new Foo();
foo.SomeEvent += ThrowException;
try
{
foo.OnSomeEvent();
}
catch (Exception)
{
// This is printed out
Console.WriteLine("Exception caught!");
}
}
static void ThrowException(object sender, EventArgs e)
{
throw new Exception();
}
}
// Define other methods and classes here
class Foo
{
public event EventHandler SomeEvent;
public void OnSomeEvent()
{
SomeEvent(this, EventArgs.Empty);
}
}
+ 9000最后一款! – 2009-07-21 06:38:30
下面是对此的一个扩展:是否可以接收'Exception'?想到我当前项目的一个特殊情况是处理用户生成的脚本。假设他们编译的时候,当我尝试运行它们时,我有一个try/catch(Exception)块来调用刚创建的方法。当然,如果发生错误,它会向用户报告,以便他们修复脚本,但是一起崩溃真的是对的? – 2009-07-21 06:44:44
这是捕获(例外)的少数正确用途之一。理想情况下,您可以在单独的进程中运行用户脚本,以免干扰您的程序。如果脚本崩溃,您只需获得类似-1073741819之类的退出代码。 – 2009-07-21 06:57:28