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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...