【发布时间】:2011-02-01 05:39:11
【问题描述】:
如果这是一个简单的问题,我深表歉意(我的 Google-Fu 今天可能不好)。
想象一下这个 WinForms 应用程序,它具有这种类型的设计:主应用程序 -> 显示一个对话框 -> 第一个对话框可以显示另一个对话框。两个对话框都有确定/取消按钮(数据输入)。
我试图找出某种类型的全局异常处理,类似于 Application.ThreadException。我的意思是:
每个对话框都有一些事件处理程序。第二个对话框可能有:
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
AllSelectedIndexChangedCodeInThisFunction();
}
catch(Exception ex)
{
btnOK.enabled = false; // Bad things, let's not let them save
// log stuff, and other good things
}
}
真的,这个对话框中的所有事件处理程序都应该以这种方式处理。这是一个例外情况,所以我只想记录所有相关信息,显示一条消息,然后禁用该对话框的确定按钮。
但是,我想避免在每个事件处理程序中使用 try/catch(如果可以的话)。所有这些 try/catch 的一个缺点是:
private void someFunction()
{
// If an exception occurs in SelectedIndexChanged,
// it doesn't propagate to this function
combobox.selectedIndex = 3;
}
我不相信 Application.ThreadException 是一个解决方案,因为我不希望异常一直回落到第一个对话框,然后是主应用程序。我不想关闭应用程序,我只想记录它,显示一条消息,然后让他们取消对话框。他们可以从那里决定做什么(也许去应用程序的其他地方)。
基本上,第一个对话框和第二个对话框之间的“全局处理程序”(然后,我想,主应用程序和第一个对话框之间的另一个“全局处理程序”)。
【问题讨论】:
标签: c# winforms exception-handling