我有一个WPF应用程序,它通过p / invoke使用串口。
我注意到,在某些PC(并非所有PC)中,即使应用程序关闭后,该过程仍存在于任务管理器中一段时间。
我想调试它,但起点在哪里?串口手柄未关闭?也许这与我对IDispose的实现有关? 我没有使用使用关键字作为串口,因为我一直保留它并一直使用它。
由于
编辑: 我无法在我的电脑上重现它,它只出现在我的一些用户PC上。 我知道这个问题不是很清楚,但对不起,我现在还不清楚。我只是想知道是否有人遇到类似的问题(为什么关闭应用程序的进程存在于任务管理器中)并给我一个线索。
串口手柄,p / invoke dll,线程现在是我的可疑点。
答案 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()
希望以上几点可能会有所帮助。