为什么我的应用程序进程在任务管理器中存在一段时间,即使在我关闭应用程序之后?

时间:2014-09-09 09:05:36

标签: wpf pinvoke dispose

我有一个WPF应用程序,它通过p / invoke使用串口。

我注意到,在某些PC(并非所有PC)中,即使应用程序关闭后,该过程仍存在于任务管理器中一段时间​​。

我想调试它,但起点在哪里?串口手柄未关闭?也许这与我对IDispose的实现有关? 我没有使用使用关键字作为串口,因为我一直保留它并一直使用它。

由于

编辑: 我无法在我的电脑上重现它,它只出现在我的一些用户PC上。 我知道这个问题不是很清楚,但对不起,我现在还不清楚。我只是想知道是否有人遇到类似的问题(为什么关闭应用程序的进程存在于任务管理器中)并给我一个线索。

串口手柄,p / invoke dll,线程现在是我的可疑点。

2 个答案:

答案 0 :(得分:1)

简单的答案是在应用程序的关键点使用日志记录框架,您提到使用线程,因此您需要在条目和附加条件中添加日志消息。线程的退出点。还要为Closing,Closed和Exit事件添加日志记录到Application对象事件处理程序,类似于App.cs类中的以下内容。

目前我使用nLog进行记录。

 protected override void OnStartup(StartupEventArgs args)
 {
     base.OnStartup(args);

     var mainWindow = new MainWindow();

     mainWindow.Closing += (s, a) =>
     {
        Logger.Info("Closing main window");
     };

     mainWindow.Closed += (s, a) =>
     {
         Logger.Info("Closed main window");
     };

     Current.Exit += (s, a) =>
     {
         Logger.Info("Bye Bye!");
         LogManager.Flush();
     };

     try
     {
         mainWindow.Show();
     }
     catch (Exception exn)
     {
         Logger.Error("Failed to open main window!");
         Logger.Error(exn);
     }
 }

答案 1 :(得分:0)

我不确定您的代码是如何实现的,但您可以使用以下内容:

1)在使用pInvoke的自定义类上实现IDisposable,并在关闭dispose方法中的app之前处置所有非托管资源。

2)您可以尝试Application.Current.Shutdown()

希望以上几点可能会有所帮助。