Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

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_Multithreading_Exit - Fatal编程技术网

C# 当应用程序退出WPF时,如何终止特定对象中的线程?

C# 当应用程序退出WPF时,如何终止特定对象中的线程?,c#,wpf,multithreading,exit,C#,Wpf,Multithreading,Exit,我正在开发一些WPF程序,并在“InjectureTricontaint.cs”类中创建一个名为“thCheckIdle”的线程,该类在“MainWindow.xaml.cs”中生成。我想在程序退出时终止此线程,所以我在应用程序类中添加了退出事件,并在下面生成隐藏代码: private void Application_Exit(object sender, ExitEventArgs e) { if(((MainWindow)System.Windows.App

我正在开发一些WPF程序,并在“InjectureTricontaint.cs”类中创建一个名为“thCheckIdle”的线程,该类在“MainWindow.xaml.cs”中生成。我想在程序退出时终止此线程,所以我在应用程序类中添加了退出事件,并在下面生成隐藏代码:

    private void Application_Exit(object sender, ExitEventArgs e)
    {
        if(((MainWindow)System.Windows.Application.Current.MainWindow).syringe.thCheckIdle!= null)
        {
            ((MainWindow)System.Windows.Application.Current.MainWindow).syringe.thCheckIdle.Abort();
        }    
    }
但在WHALE.exe消息中出现“System.NullReferenceException”类型的未处理异常时,它无法工作,我发现MainWindow的状态为null,即使程序执行时显示MainWindow。 如何在退出主程序时终止该线程?

您可以将其设置为后台线程,以便在主线程完成后不会阻止您的应用程序退出。 就说 thCheckIdle.IsBackground=true;当创建它时


中止是停止线程的可怕方式。根据线程正在执行的操作,将线程设置为后台可能是有意义的。如果使用Task.Run启动代码,那么分配给该任务的线程将已经是后台线程,但对于执行空闲检查的长时间运行线程来说,这不是合适的解决方案。调试NullReferenceException是另一个完整的副本。如果你已经用尽了副本中所有有用的建议,仍然需要帮助,那么你需要发布一个问题,这个问题会重现问题。非常感谢。它显然可以在没有应用程序退出事件的情况下工作。但我仍然想知道如何在应用程序类中访问MainWindows字段。它适用于使用MainWindowsSystem.windows.Application.Current.MainWindow在MainWindow中生成的其他子窗口或类,但不适用于应用程序类。@KimSJ您可以订阅应用程序的激活事件并从中访问当前的MainWindow。