use*_*236 8 c# silverlight global try-catch
我知道尝试捕获已经讨论了很多,但我还没有找到解决我的问题的方法.
我正在编写一个Silverlight应用程序,其中每个异常都应该生成一个MessageBox,上面写着"抱歉给您带来的不便".
由于我无法保证我的代码可以免除异常,我的同事已经指示我尝试捕获每种方法(几百个),如下所示:
public void Method1()
{
try
{
...
}
catch (Exception e)
{
MessageBox.Show("Something went wrong, we apologize for the inconvenience. \n" + e.Message);
}
}
public void Method2()
{
try
{
...
}
catch (Exception e)
{
MessageBox.Show("Something went wrong, we apologize for the inconvenience. \n" + e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
但它似乎太过分了.我已经读过一个不会以这种方式使用try catch加上会有很多重复的代码加上代码将被混淆并且难以阅读.
有没有像我可以使用的全球尝试捕捉的替代方案?
感谢名单!/麦克风
每种方法中的尝试捕获和单一方法都很愚蠢.但:
你的同事希望你在这种程度上捕获例外的原因是什么?你是否让异常滑落到他们不想要的程度?
我有一个与我们的客户已经使用的产品类似的情况.这是一个类似于silverlight的WPF项目.我的工作是克服旧的错误代码中的错误,没有人仍然与我们合作掌握.应用程序与Windows中的其他程序交叉功能,无法预见在不同环境中可能出现的问题.
我有这些问题:
我的方法是:
OopsBox用于在每个catch中处理单行的意外错误.每个catch都有一个尽可能友好的消息,并隐藏在扩展按钮后面的脏东西.该框还用于预期错误的错误消息,在这些情况下,没有展开按钮,也没有脏东西显示,因为我们已经知道出了什么问题.

我们获得了这个:
它花费了这个:
异常应该在它们造成任何损害之前被捕获,例如将用户抛弃在上下文之外,并且在有意义的级别中.
当用户运行您的程序并发生意外情况时,请确保您可以指明从何处开始查找.我通过捕获为此目的选择的"用户和系统端点"上的其他未处理的异常来做到这一点.
错误框与否,尝试找到一种方法,当出现问题时不要将用户抛出上下文.但是在所有情况下很难使它工作,但是当它发生时它是致命的.
小智 5
您可以使用Application.ThreadException和AppDomain.CurrentDomain.UnhandledException属性捕获未处理(和线程)异常。
您的Main看起来像这样:
[STAThread]
static void Main() {
if (Debugger.IsAttached) {
Run();
return;
}
Application.ThreadException += ApplicationThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Run();
}
Run Code Online (Sandbox Code Playgroud)
请注意调试器检查,以便调试器在开发时可以捕获这些异常。
运行功能非常简单
static void Run() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
Run Code Online (Sandbox Code Playgroud)
然后是两个异常处理程序。
static void ApplicationThreadException(object sender, ThreadExceptionEventArgs e) {
ErrorInformationDialog eid = new ErrorInformationDialog(e.Exception.Message, e.Exception);
eid.ShowDialog();
}
static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) {
ErrorInformationDialog eid = new ErrorInformationDialog(e.ExceptionObject as Exception);
eid.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
而且ErrorInformationDialog只是我汇总在一起用来显示错误通知并提供报告错误指示的一种形式。
| 归档时间: |
|
| 查看次数: |
4999 次 |
| 最近记录: |