c# – 收集崩溃数据的最佳方法是什么?

前端之家收集整理的这篇文章主要介绍了c# – 收集崩溃数据的最佳方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,我试图从程序中自动收集数据的概念出售 – 即弹出一个对话框,要求用户在出现问题时发送报告.

我在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();
   }
}

更多文档on MSDN.

在一个小问题上,使用ThreadException事件还允许主消息循环继续运行,以防异常不是致命的(即容错方案),而try / catch方法可能要求您重新启动主消息循环,这可能引起副作用.

猜你在找的C#相关文章