Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Mobile应用程序意外退出_C#_Multithreading_Windows Mobile_Microsoft Sync Framework - Fatal编程技术网

C# Windows Mobile应用程序意外退出

C# Windows Mobile应用程序意外退出,c#,multithreading,windows-mobile,microsoft-sync-framework,C#,Multithreading,Windows Mobile,Microsoft Sync Framework,我有一个相当复杂的c应用程序,运行在WindowsMobile 5.0及更高版本上。它包括使用SQL CE、在单独线程上更新GPS坐标的代码,以及在单独线程中使用Microsoft Sync Framework在后台同步到服务器的代码。应用程序通常运行得相当好,但在生产过程中,应用程序主窗口经常会消失。 我在Program.cs文件中有如下代码: static class Program { private static NLog.Logger _logger = NLog.LogMan

我有一个相当复杂的c应用程序,运行在WindowsMobile 5.0及更高版本上。它包括使用SQL CE、在单独线程上更新GPS坐标的代码,以及在单独线程中使用Microsoft Sync Framework在后台同步到服务器的代码。应用程序通常运行得相当好,但在生产过程中,应用程序主窗口经常会消失。 我在Program.cs文件中有如下代码:

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的异常处理程序或未处理的异常处理程序中记录任何异常。我认为这可能与运行内存不足有关,这就是为什么我也连接了Hibernate事件。但是我也没有得到Hibernate事件


如果您有任何帮助或建议,我将不胜感激,因为我没有想法和要检查的内容。

好吧,尽管有可能会说一句显而易见的话,有什么东西正在破坏您的应用程序,阻止您的关闭事件启动

对于在不同线程上运行的项目,您可以为它们创建实现IDisposable的类容器吗?然后,您可以在Dispose方法中放置NLog引用来记录数据

public class FirstClass : IDisposable {

  private bool isDisposed;

  public FirstClass() {
    isDisposed = false;
  }

  public void Dispose() {
    _logger.Info("FirstClass is done.");
    isDisposed = true;
  }

  public void Method1() {
    while (!isDisposed) {
      // your code here
    }
  }

}
但是,您需要创建一种方法,以便该类可以访问_logger


线程中的bug可能很难捕捉。

好吧,冒着显而易见的风险,有什么东西正在破坏你的应用程序,阻止你的关闭事件触发

对于在不同线程上运行的项目,您可以为它们创建实现IDisposable的类容器吗?然后,您可以在Dispose方法中放置NLog引用来记录数据

public class FirstClass : IDisposable {

  private bool isDisposed;

  public FirstClass() {
    isDisposed = false;
  }

  public void Dispose() {
    _logger.Info("FirstClass is done.");
    isDisposed = true;
  }

  public void Method1() {
    while (!isDisposed) {
      // your code here
    }
  }

}
但是,您需要创建一种方法,以便该类可以访问_logger


线程中的bug可能很难捕捉。

您好,jp2code,我不确定是否遵循您的建议。无论如何,独立线程上的所有主函数都有try/catch块,我没有从那里得到任何记录。此外,异常是否会马歇尔到主线程,然后在那里或“UnhandledException处理程序”中被捕获?嘿,DJ。我添加了一个创建一次性类的小代码示例。在本例中,Method1是您用来执行线程的任何方法。当它完成并且您的类被销毁时,您的_logger函数将被调用。嗨,jp2code,我不确定我是否遵循您的建议。无论如何,独立线程上的所有主函数都有try/catch块,我没有从那里得到任何记录。此外,异常是否会马歇尔到主线程,然后在那里或“UnhandledException处理程序”中被捕获?嘿,DJ。我添加了一个创建一次性类的小代码示例。在本例中,Method1是您用来执行线程的任何方法。当它完成并且类被销毁时,将调用_logger函数。