我正在学习C#和WPF。我有一个目前正在编写的程序,但它已经关闭了一个问题。当用户关闭主窗口时,程序结束,但该过程继续在后台运行。每次打开一个新窗口时,都会创建一个新进程并且永远不会结束。我尝试通过将以下代码添加到MainWindow.xaml.cs文件来解决此问题:
private void InventoryUpdater_Closed(object sender, EventArgs e)
{
Application.Current.Shutdown();
}
这会关闭进程,但会弹出一个窗口,其作用类似于程序关闭错误,并提示用户“关闭程序"”。该窗口指出," [应用程序名称]已停止工作。
如果没有每次想要关闭时提示用户,我该如何结束我的申请流程?我可能没有妥善处理某些东西吗?
答案 0 :(得分:1)
所以我想出了导致提示的原因以及造成无休止过程的原因。
提示与我打开和关闭其他3个窗口有关。以下是我更改为停止从Application.Current.Shutdown()
收到错误的内容。我改变了这段代码:
private void settingsWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
updateSettings();
e.Cancel = true;
main.Show();
Hide();
}
private void settingsButton_MouseUp(object sender, RoutedEventArgs e)
{
settingsWindow settingsWindow = new settingsWindow(this);
if (!settingsWindow.settingsOpen)
{
settingsWindow.Show();
Hide();
}
}
到此代码:
private void settingsWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
updateSettings();
}
private void settingsButton_MouseUp(object sender, RoutedEventArgs e)
{
settingsWindow settingsWindow = new settingsWindow(this);
if (!settingsWindow.settingsOpen)
{
settingsWindow.ShowDialog();
}
}
一旦我关闭main
,它就会回到我在加载时初始化的其他窗口实例,并在其Closing事件中循环。一旦到达main.Show()
,它就无法显示已经关闭的内容。
一旦我这样做了,我就要弄清楚我Loaded
事件中原始初始化的其他窗口是否会导致额外的追踪没有结束。这是我改变的。我改变了这个:
private void InventoryUpdater_Loaded(object sender, RoutedEventArgs e)
{
settingsWindow settings = new settingsWindow(this);
sftpSettings severSettings = new sftpSettings(settings);
TimeSpan na = queueCustomTask();
Stop = true;
runManually.IsEnabled = true;
ssdRunManually.IsEnabled = true;
startAutoRun.IsEnabled = true;
}
对此:
private void InventoryUpdater_Loaded(object sender, RoutedEventArgs e)
{
TimeSpan na = queueCustomTask();
Stop = true;
runManually.IsEnabled = true;
ssdRunManually.IsEnabled = true;
startAutoRun.IsEnabled = true;
}
我甚至不确定为什么初始化仍然存在。一切都已切换到静态全局变量,因此删除这两行不会产生任何影响。感谢所有推动正确的方向!