WPF C #Windows抛出"应用程序已停止工作"在Application.Current.Shutdown();呼叫

时间:2016-08-10 19:27:49

标签: c# wpf windows visual-studio-2015

我正在学习C#和WPF。我有一个目前正在编写的程序,但它已经关闭了一个问题。当用户关闭主窗口时,程序结束,但该过程继续在后台运行。每次打开一个新窗口时,都会创建一个新进程并且永远不会结束。我尝试通过将以下代码添加到MainWindow.xaml.cs文件来解决此问题:

private void InventoryUpdater_Closed(object sender, EventArgs e)
        {
            Application.Current.Shutdown();
        }

这会关闭进程,但会弹出一个窗口,其作用类似于程序关闭错误,并提示用户“关闭程序"”。该窗口指出," [应用程序名称]已停止工作。

如果没有每次想要关闭时提示用户,我该如何结束我的申请流程?我可能没有妥善处理某些东西吗?

1 个答案:

答案 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;
    }

我甚至不确定为什么初始化仍然存在。一切都已切换到静态全局变量,因此删除这两行不会产生任何影响。感谢所有推动正确的方向!