我有一个相当复杂的c#应用程序,可以在Windows Mobile 5.0及更高版本上运行。它包括使用SQL CE的代码,在单独的线程上更新GPS坐标,并且还使用单独线程中的Microsoft Sync Framework与后台中的服务器同步。应用程序一般运行良好,但在生产中经常出现,应用程序主窗口消失。
我喜欢在Program.cs文件下面的代码:Windows Mobile应用程序意外退出
static class Program
{
private static NLog.Logger _logger = NLog.LogManager.GetLogger("Program");
[MTAThread]
static void Main()
{
try
{
_logger.Info("Program V {0} starting.", Utility.AppVersion);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new MainForm());
_logger.Info("After Application.Run().");
}
catch (Exception ex)
{
_logger.ErrorException("Exception occurred.", ex);
}
}
static void MobileDevice_Hibernate(object sender, EventArgs e)
{
_logger.Info("Hibernate was received.");
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
_logger.ErrorException("Unhandled exception was thrown", e.ExceptionObject as Exception);
}
}
我看到如预期的那样启动信息日志,并在程序中消失,我也得到了After Application.Run()
消息。但是我没有收到记录在MainForm.Closing事件中的消息,所以它似乎永远不会被调用。我也没有从异常处理程序周围的Application.Run
或UnhandledException
处理程序中获取任何异常记录。我认为这可能与运行低/内存不足有关,这就是为什么我还要连接Hibernate
事件。但是我也没有得到Hibernate事件。因为我的想法和需要检查的事项
任何帮助或建议,将不胜感激。
嗨jp2code,不知道我按照你的建议。无论如何,所有在独立线程上的主要函数都有'try/catch'块,我没有从那里记录任何东西。另外,这个异常不会汇集到主线程中,然后在那里或'UnhandledException'处理程序中被捕获? – Djdewet 2012-02-02 09:00:36
嘿DJ。我添加了一个创建一次性类的代码示例。在这个例子中,'Method1()'是你用来处理的任何东西。当它完成并且你的类被销毁时,你的'_logger'函数将被调用。 – jp2code 2012-02-02 15:11:57