C# 当应用程序的工作完成时,如何收集所有异常?

C# 当应用程序的工作完成时,如何收集所有异常?,c#,.net,winforms,debugging,C#,.net,Winforms,Debugging,运行应用程序。工作。关上窗户。我想获得一条消息,其中包含有关异常发生顺序及其内容的信息。如何正确收集它们?第一个想法是使用它: public class Collector { public static System.Collections.Concurrent. ConcurrentBag<Exception> ExceptionCollection; } public static void me

运行应用程序。工作。关上窗户。我想获得一条消息,其中包含有关异常发生顺序及其内容的信息。如何正确收集它们?第一个想法是使用它:

       public class Collector
    {
        public static System.Collections.Concurrent.
            ConcurrentBag<Exception> ExceptionCollection;

    }

    public static void method1()
    {
        try { }
        catch (Exception ex) { Collector.ExceptionCollection.Add(ex); }
    }

    public static void methodN()
    {
        try { }
        catch (Exception ex) { Collector.ExceptionCollection.Add(ex); }
    }
公共类收集器
{
公共静态系统.Collections.Concurrent。
并发包例外收集;
}
公共静态无效方法1()
{
试试{}
catch(Exception ex){Collector.ExceptionCollection.Add(ex);}
}
公共静态无效方法n()
{
试试{}
catch(Exception ex){Collector.ExceptionCollection.Add(ex);}
}

什么是更方便的选项?

使用文本控件,然后使用预期的应用程序流(方法到方法),在catch内部使用try-catch块,将异常消息添加到文本控件

通常,在应用程序运行时,流是恒定的,这将帮助您了解错误发生的确切时间/地点

为了使它更具体,您可以在catch块内显示方法名(错误发生的地方)以进行测试,并且一旦确定了逻辑流,就可以用数字替换方法名

(如果您希望得到非常一般的答案,请提供一些代码)


好运

这取决于您当前如何处理所有这些异常

您可以查看
AppDomain.UnhandledException
AppDomain.FirstChanceException
()事件。后者应在将所有托管异常传递给正常异常处理程序之前提供通知

使用该异常处理程序或您当前的异常处理程序,您必须将有关异常的信息存储在某个位置(文件、数据库、内存等),然后根据需要对其进行处理


请注意,有些异常是您无法真正恢复的,并且在收集信息的过程中可能会发生异常。

查看您的一些代码会有所帮助。请阅读以下内容:我已经使用了try-catch-block,但如果应用程序不能更有效地停止,我不知道如何收集这些块的结果。你能告诉我一个更强大更有用的例子吗?