相关疑难解决方法(0)

为什么不抓住一般例外

我的VS刚刚告诉我;

警告2 CA1031:Microsoft.Design:修改'Program.Main(string [])'以捕获比"Exception"更具体的异常或重新抛出异常.

我为什么要那样做?如果我这样做,并没有捕获所有异常来处理它们,我的程序崩溃与所有流行的报告屏幕.我不希望我的用户得到这样的错误废话!

为什么我不能立刻捕获所有异常,向用户显示一个很好的警告说:"出了问题,不关心它,我会处理它,只是耐心等待"?

编辑:刚看到我在这里有一个骗局,对不起那个杜普

编辑2:澄清事情; 在捕获任何异常后我退出程序!我只是不希望我的用户看到"向microsoft报告"对话框,该对话框在控制台应用程序中引发未处理的异常时显示!

exception

26
推荐指数
4
解决办法
2万
查看次数

WPF如何处理异常并继续

我最初有代码处理DispatcherUnhandledException哪个会记录错误并将异常标记为已处理

protected override void OnStartup(StartupEventArgs e)
{
    Dispatcher.UnhandledException += OnDispatcherUnhandledException;
}
...
void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
    // Log Error here
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

我试图通过涵盖更广泛的未处理异常来改善这一点

    protected override void OnStartup(StartupEventArgs e)
    {
         AppDomain.CurrentDomain.UnhandledException += (s, ex) =>
         LogUnhandledException((Exception)ex.ExceptionObject, 
        "AppDomain.CurrentDomain.UnhandledException");

         DispatcherUnhandledException += (s, ex) =>
         LogUnhandledException(ex.Exception, 
         "Application.Current.DispatcherUnhandledException");

         TaskScheduler.UnobservedTaskException += (s, ex) =>
         LogUnhandledException(ex.Exception, 
         "TaskScheduler.UnobservedTaskException");
    }
Run Code Online (Sandbox Code Playgroud)

但我无法使用此事件处理异常

    private void LogUnhandledException(Exception e, string @event)
    {
      // Log Error here
      e.Handled = true; //Doesn't work
    }
Run Code Online (Sandbox Code Playgroud)

我如何处理所有类型的异常,以便代码尝试继续?

c# wpf

9
推荐指数
1
解决办法
878
查看次数

.NET Catch常规异常

.NET编程指南声明我们不应该捕获一般异常.我假设以下代码不是很好,因为一般异常类型catch:

    private object CreateObject(string classname)
    {
        object obj = null;
        if (!string.IsNullOrEmpty(classname))
        {
           try
           {
              System.Type oType = System.Type.GetTypeFromProgID(customClass);
              obj = System.Activator.CreateInstance(oType);
           }
           catch (Exception ex)
           {
               Log.Error("Unable to create instance for COM Object with class name " + classname + "\n" + ex.Message);
           }
        }
        return obj;
    }
Run Code Online (Sandbox Code Playgroud)

在下面的代码中,我捕获特定的异常但不是所有异常,然后我重新抛出异常,以防异常与非泛型异常.但是,函数"CreateInstance"可能会抛出许多异常(ArgumentNullException,ArgumentException,NotSupportedException,TargetInvocationException,MethodAccessException,MemberAccessException,InvalidComObjectException,MissingMethodException,COMException,TypeLoadException).

捕获所有其他个别例外是否可以接受?或者,还有更好的方法?

    private object CreateObject(string classname)
    {
        object obj = null;
        if (!string.IsNullOrEmpty(classname))
        {
           try
           {
              System.Type oType = System.Type.GetTypeFromProgID(customClass);
              obj = System.Activator.CreateInstance(oType);
           }
           catch (NotSupportedException ex)
           {
              Log.Error("...." + ex.Message); …
Run Code Online (Sandbox Code Playgroud)

.net exception-handling

6
推荐指数
2
解决办法
2810
查看次数

标签 统计

.net ×1

c# ×1

exception ×1

exception-handling ×1

wpf ×1