【发布时间】:2019-03-06 10:37:17
【问题描述】:
我有 wpf 和控制台应用程序。 我想从另一个应用程序正确关闭 wpf 应用程序。
代码关闭应用:
public static async Task CloseProcessAsync(string processName) {
await Task.Run(() => {
try {
foreach (var process in Process.GetProcessesByName(processName)) {
process.Close();
}
} catch (Exception e) {
Logger.Error($"Utils.utils.FileUtils.{MethodBase.GetCurrentMethod().Name}: {e.Message}");
}
});
}
Сlosure处理代码:
private void MainWindow_OnClosed(object sender, EventArgs e) {
Logger.Debug(MethodBase.GetCurrentMethod().Name);
}
private void MainWindow_OnClosing(object sender, CancelEventArgs e) {
Logger.Debug(MethodBase.GetCurrentMethod().Name);
}
问题是方法 Close() \ Dispose() \ CloseMainWindow() 在 wpf 应用程序上不起作用。日志为空
我尝试按照here 的说明解决问题。但在我的情况下,即使打开 WPF 应用程序的 GUI,CloseMainWindow() 方法也不起作用。
据我了解,我需要一个特殊的方法来处理 wpf 应用程序中的关闭请求,而不仅仅是覆盖方法 MainWindow_OnClosing() 或 MainWindow_OnClosed()。
我觉得解决方案应该很简单,不用第三方库。
【问题讨论】:
-
好问题,但我无法弄清楚关于关闭进程的“暴力”代码与关闭窗口有什么关系......
-
@JB,我想用 svn 更新我的应用程序。为此,我启动了一个控制台应用程序来关闭我的 wpf 应用程序,执行更新并重新启动应用程序。 process.Kill() 方法做了我需要的一切,但是有一个问题!我需要在关闭wpf的时候释放所有资源,而kill()不会这样做。 + 在托盘中保留图标