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