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

Wpf 为什么我的应用程序';即使在我关闭应用程序后,任务管理器中的进程仍存在一段时间?,wpf,pinvoke,dispose,Wpf,Pinvoke,Dispose,我有一个WPF应用程序,它通过p/invoke使用串行端口 我注意到,在某些PC机(并非所有PC机)中,即使在应用程序关闭后,任务管理器中也会存在一段时间的进程 我想调试一下,但起点在哪里?串行端口句柄未关闭?也许这与我的IDispose实现有关? 我没有对串行端口使用关键字,因为我一直保留并使用它 谢谢 编辑: 我无法在我的电脑上复制它,它只出现在我用户的一些电脑上。 我知道这个问题不是很清楚,但很抱歉我现在还不清楚。我只是想知道是否有人见过类似的问题(为什么TaskManager中存在封闭应

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

我注意到,在某些PC机(并非所有PC机)中,即使在应用程序关闭后,任务管理器中也会存在一段时间的进程

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

谢谢

编辑: 我无法在我的电脑上复制它,它只出现在我用户的一些电脑上。 我知道这个问题不是很清楚,但很抱歉我现在还不清楚。我只是想知道是否有人见过类似的问题(为什么TaskManager中存在封闭应用程序的流程),并给我一个线索


串口句柄、p/invoke dll、线程现在对我来说是可疑点。

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

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

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


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

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

目前我使用的日志

 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);
     }
 }

串行端口句柄未关闭
这不是进程仍在运行的原因。未停止的线程可能是一个原因。为什么不调试关闭呢?@AlexFarber是的,我使用了一些线程,我会检查它们在UI关闭后是否仍在运行。这只是胡乱猜测,并没有特别的帮助。回答一个无法回答的问题没有什么意义。@Yogesh我将尝试Application.Current.Shutdown()谢谢,我总是太专注于在VS中调试而没有使用日志文件。