首页 > 解决方案 > WPF应用程序关闭时如何杀死所有线程

问题描述

我有一个 WPF 应用程序。我正在开始一些线程。当我关闭应用程序时,它仍在后台运行(我从任务管理器中看到),因为线程仍在运行。我想在应用程序关闭时杀死所有线程。这是代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    Thread thread;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        thread = new Thread(new ParameterizedThreadStart(abc));
        thread.Start();
    }

    private void abc(object obj)
    {
        Thread.Sleep(10000);
    }
}

在这种情况下,当我单击按钮并关闭应用程序时,它仍会在后台运行 10 秒。如何杀死关闭应用程序上的所有线程?

标签: c#wpfmultithreading

解决方案


线程既可以是前台线程,也可以是后台线程。从文档中:

后台线程与前台线程相同,只是后台线程不会阻止进程终止。一旦属于一个进程的所有前台线程都已终止,公共语言运行时就会结束该进程。任何剩余的后台线程都将停止并且不会完成。

通过Thread类的构造函数创建的线程默认是前台线程。IsBackground因此,您可以通过将属性设置为:使线程成为后台线程以在应用程序关闭时终止它true

private void Button_Click(object sender, RoutedEventArgs e)
{
   thread = new Thread(new ParameterizedThreadStart(abc));
   thread.IsBackground = true;
   thread.Start();
}

推荐阅读