c# - 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 秒。如何杀死关闭应用程序上的所有线程?
解决方案
线程既可以是前台线程,也可以是后台线程。从文档中:
后台线程与前台线程相同,只是后台线程不会阻止进程终止。一旦属于一个进程的所有前台线程都已终止,公共语言运行时就会结束该进程。任何剩余的后台线程都将停止并且不会完成。
通过Thread
类的构造函数创建的线程默认是前台线程。IsBackground
因此,您可以通过将属性设置为:使线程成为后台线程以在应用程序关闭时终止它true
:
private void Button_Click(object sender, RoutedEventArgs e)
{
thread = new Thread(new ParameterizedThreadStart(abc));
thread.IsBackground = true;
thread.Start();
}
推荐阅读
- powershell - 试图将字符串数组转换为日期
- identityserver4 - 在 identityserver4 和自定义 AuthorizationHandler User.Identity.isAuthenticated = false 上使用客户端凭据流
- android - SQLite 奇怪的行为
- javascript - 如何根据 div 的宽度调整 font-size 属性?
- django - 运行迁移命令时出现此错误。以 10 为基数的 int() 的无效文字:“肖像”。下面是我的代码。Django 版本=1.11
- bash - 你如何根据文件名将多个文件解压到多个子目录中
- php - 如何回显多个数组 - PHP
- html - 书签 :~:text= 规格
- sql - NamedParameterJdbcTemplate 查询方法不返回正确的记录数
- rust - 为什么 Rust 的 ChunksExact 不
在编译时有一个已知的大小