当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《收集崩溃数据的最佳方法是什么?》经验,为你挑选了1个好方法。

所以我出售了试图从程序中自动收集数据的概念 - 即弹出一个对话框,要求用户在出现问题时发送报告.

我在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



1> chakrit..:

我认为你是对的,你不会知道会出现什么问题,这就是重点.

但是,您可以考虑为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方法可能要求您重新启动主消息循环,这可能引起副作用.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有