【问题标题】:NullReferenceException on Windows Mobile 6.5 [duplicate]Windows Mobile 6.5 上的 NullReferenceException [重复]
【发布时间】:2016-05-25 13:30:38
【问题描述】:

我有一个适用于 Windows Mobile 6.5 的 C# 应用程序。问题是,经过大量使用时间(2-3 小时)后,有时应用程序会在 Main() 中出现“NullReferenceException”崩溃。

我的所有程序都带有 try catch,在 main 中进行测试以捕获不同的异常(ObjectDisposed、NullException 和 Exception),并且我也尝试了该事件:

AppDomain.CurrentDomain.UnhandledException +=
     new UnhandledExceptionEventHandler(OnUnhandledException);

应用程序在使用一段时间后仍然挂起。有没有人知道任何应用程序来监控这个崩溃,比如 Windows 中的 DebugDiag,或者一些代码可以在日志中捕获这个异常?

main函数中的代码如下:

 static void Main()
    {
        AppDomain.CurrentDomain.UnhandledException +=
                  new UnhandledExceptionEventHandler(OnUnhandledException);
        try
        {

            CLog.EscribirEnLog("Main");               

            using (AppExecutionManager execMgr = new AppExecutionManager(appName))
            {
                if (execMgr.IsFirstInstance)
                {

                    Application.Run(new FormInicioSesion());
                    CUtiles.MatarProceso("FoxitReader.exe");
                    CUtiles.MatarProceso("pimg.exe");
                }
            }
        }
        catch (NullReferenceException ex)
        {
            CLog.EscribirEnLog("ERROR Null " + ex.StackTrace);
            Application.Exit();
        }
        catch (ObjectDisposedException e)
        {
            CLog.EscribirEnLog("ERROR  : Excepcion en main : " + e.StackTrace.ToString() + ";   " + e.InnerException.ToString() + ";  " + e.Message.ToString());

            Application.Exit();
        }
        catch (Exception e)
        {
            CLog.EscribirEnLog("ERROR  : Excepcion : " + e.StackTrace.ToString() + ";   " + e.InnerException.ToString() + ";   " + e.Message.ToString());
            Application.Exit();

        }
        finally
        {
            CLog.EscribirEnLog("Main-Finally");
        }         

    }

【问题讨论】:

  • 感谢您的回答。我知道导致 NullReferenceException 的原因以及避免它的方法,问题是我不知道问题出在哪里,这就是为什么我需要一种方法来捕获它来解决它。
  • 您的方法是使用try...catch 块。你能发布你的try...catch 代码是什么吗?
  • 我已经用代码编辑了帖子

标签: c# .net windows-mobile windows-mobile-6.5


【解决方案1】:

获取异常来源的唯一方法是:

  1. 使用 try..catch 包装所有可能引发异常的代码。如果使用 StackTrace 和 InnerException 用 try 包装主函数 catch 是一个好的开始
  2. 使用日志文件记录 catch 块中的异常
  3. 使用 StackTrace 和 InnerException 属性获取详细信息 有关例外情况的信息
  4. 在调试会话中运行您的应用程序,可能使用远程调试通过 网络

【讨论】:

  • 我已经按照步骤 1 到 3 并尝试了步骤 4,但是 windows mobile 中的远程调试不允许手机连接到互联网。
  • 如果您的移动网络设置允许互联网连接和远程调试取决于移动设置。请参阅连接到 Internet/Work 并将 Work 和 Work 网络都设置为“此连接到 Internet”。然后设置网卡连接到Work。查看有关连接管理器设置的各种信息。
猜你喜欢
  • 2012-05-20
  • 2012-07-29
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2014-11-21
  • 2017-12-18
相关资源
最近更新 更多