所以我出售了试图从程序中自动收集数据的概念 - 即弹出一个对话框,要求用户在出现问题时发送报告.
我在MS Visual Studio C#中工作.
从实现的角度来看,在我的主program.cs文件中放置一个try/catch循环是否有意义?像这样:
try { Application.Run(new myMainForm()); } catch (Exception ex) { //the code to build the report I want to send and to //pop up the Problem Report form and ask the user to send }
或者在整个代码段中放置try/catch循环以捕获更具体的异常类型是否有意义?(我想的不是因为这是一个新的应用程序,并且提出更具体的异常捕获意味着我知道会出现什么问题......我不知道,这就是为什么以上对我来说似乎有意义.)
-Adeena
我认为你是对的,你不会知道会出现什么问题,这就是重点.
但是,您可以考虑为ThreadException事件添加处理程序.
上面的代码可以工作,但是有些情况下多线程可能是这些代码的问题,因为并非所有Windows窗体程序中的代码都将在主Application.Run循环线程中运行.
以下是链接文章中的示例代码:
[STAThread] static void Main() { System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler(ReportError); System.Windows.Forms.Application.Run(new MainForm()); } private static void ReportError(object sender, ThreadExceptionEventArgs e) { using (ReportErrorDialog errorDlg = new ReportErrorDialog(e.Exception)) { errorDlg.ShowDialog(); } }
有关MSDN的更多文档.
在一个小问题上,使用ThreadException事件还允许主消息循环继续运行,以防异常不是致命的(即容错方案),而try/catch方法可能要求您重新启动主消息循环,这可能引起副作用.