Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我打开另一个窗口,我的WPF应用程序仍在运行_C#_Wpf - Fatal编程技术网

C# 如果我打开另一个窗口,我的WPF应用程序仍在运行

C# 如果我打开另一个窗口,我的WPF应用程序仍在运行,c#,wpf,C#,Wpf,我正在使用mvvm toolkint编写WPF应用程序 在主窗口中,我在一个按钮中有一个命令,可使用以下命令打开另一个窗口: catView.ShowDialog(); 嗯,我关闭了那个窗口(使用关闭按钮或X),当我关闭主窗口时,应用程序仍在运行,我必须关闭它 如果我不打开第二个窗口,应用程序将正常关闭 为什么如果我打开另一个窗口,我无法正常关闭应用程序 我在第二个窗口的关闭按钮中有: this.DialogResult = true; this.Close(); 另一方面,我以这种方式启动

我正在使用mvvm toolkint编写WPF应用程序

在主窗口中,我在一个按钮中有一个命令,可使用以下命令打开另一个窗口:

catView.ShowDialog();
嗯,我关闭了那个窗口(使用关闭按钮或X),当我关闭主窗口时,应用程序仍在运行,我必须关闭它

如果我不打开第二个窗口,应用程序将正常关闭

为什么如果我打开另一个窗口,我无法正常关闭应用程序

我在第二个窗口的关闭按钮中有:

this.DialogResult = true;
this.Close();
另一方面,我以这种方式启动应用程序(mvvm工具包方式):


非常感谢。

我不知道这是否导致您的问题,但您不需要在第二个窗口中调用
Close()
。设置
对话框result
会自动关闭窗口。

我不知道这是否导致您的问题,但您不需要在第二个窗口中调用
Close()
。设置
对话框result
会自动关闭窗口。

问题可能与打开和关闭窗口无关,但在该窗口内有问题

这通常发生在当您关闭应用程序时,另一个线程仍在运行,请检查窗口代码中是否有可能正在创建新线程的内容(包括System.Threading.thread、ThreadPool、BackgroundWorker和第三方组件),确保在关闭应用程序之前关闭所有后台线程(或者,如果无法关闭它们,至少将它们标记为后台线程)


还要查找可以打开另一个(不可见)窗口的任何内容,通常使用不可见窗口的窗口消息作为进程间通信机制,再次查找可能正在执行此操作的第三方代码。

问题可能与打开和关闭窗口无关,但在该窗口内有问题

这通常发生在当您关闭应用程序时,另一个线程仍在运行,请检查窗口代码中是否有可能正在创建新线程的内容(包括System.Threading.thread、ThreadPool、BackgroundWorker和第三方组件),确保在关闭应用程序之前关闭所有后台线程(或者,如果无法关闭它们,至少将它们标记为后台线程)


还要查找任何可以打开另一个(不可见)窗口的内容,通常使用不可见窗口的窗口消息作为进程间通信机制,再次查找可能正在这样做的第三方代码。

Nir是正确的,一个线程可能仍在其他窗口中运行

您可以通过在窗口关闭时终止应用程序的线程调度程序来解决此问题

public Window1()
{
    InitializeComponent();

    // This line should fix it:
    this.Closed += (sender, e) => this.Dispatcher.InvokeShutdown();
}
如果这不是正确的做事方式,我很高兴被纠正。不过对我来说效果很好

附言。 如果您的另一个窗口设计为在不同的线程中运行,请阅读Eugene Prystupa的文章:
Nir是正确的,一个线程可能仍在您的另一个窗口中运行

您可以通过在窗口关闭时终止应用程序的线程调度程序来解决此问题

public Window1()
{
    InitializeComponent();

    // This line should fix it:
    this.Closed += (sender, e) => this.Dispatcher.InvokeShutdown();
}
如果这不是正确的做事方式,我很高兴被纠正。不过对我来说效果很好

附言。 如果您的另一个窗口设计为在不同的线程中运行,请阅读Eugene Prystupa的文章:

窗口关闭时未关闭(),但这并不能解决问题。即使使用Show(),问题仍然存在。窗口关闭时未关闭(),但这并不能解决问题。即使使用Show()),问题仍然存在。有趣的是,它不再发生。我不知道我是否更改了导致错误的窗口中的某些内容或只是消失。谢谢。有趣的是,它不再发生。我不知道我是否更改了导致错误的窗口中的某些内容或只是消失。谢谢。