C# 关闭应用程序是否会停止所有活动的BackgroundWorker?
简单问题,重复标题:C# 关闭应用程序是否会停止所有活动的BackgroundWorker?,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,简单问题,重复标题: 关闭WinForms应用程序是否会停止所有活动的后台工作人员?如果应用程序完全关闭(因为没有任何东西阻止它关闭),您的后台工作人员也将消失。我想是的。因为线程与进程关联,如果进程关闭,则所有线程都必须结束。一旦进程结束,所有关联的线程也会结束。是的,它会结束 BackgroundWorker.RunWorkerAsync只需对内部委托调用BeginInvoke,然后将请求排入ThreadPool队列。因为所有ThreadPool线程都是,所以它将在应用程序结束时结束 但是,
关闭WinForms应用程序是否会停止所有活动的后台工作人员?如果应用程序完全关闭(因为没有任何东西阻止它关闭),您的后台工作人员也将消失。我想是的。因为线程与进程关联,如果进程关闭,则所有线程都必须结束。一旦进程结束,所有关联的线程也会结束。是的,它会结束
BackgroundWorker.RunWorkerAsync
只需对内部委托调用BeginInvoke
,然后将请求排入ThreadPool
队列。因为所有ThreadPool
线程都是,所以它将在应用程序结束时结束
但是,请记住:
表单
实例(通常是传递给应用程序的实例。在Visual Studio自动生成的程序
类中运行)。如果您的子窗口具有后台工作程序,则它不会自动停止其BackgroundWorker
更多信息:,BackgroundWorker线程是后台线程(线程) 在主(UI)线程停止后,线程可以继续执行的唯一方法是,如果它是显式创建的,则创建一个新的线程实例并将IsBackground设置为false。如果您不这样做(或者如果您使用生成后台线程的线程池,或者BackgroundWorker也在内部使用线程池),那么您的线程将是后台线程,并且将在主线程结束时终止。首先,简单回答一下: 当进程关闭时,其所有线程都已终止。这是毫无疑问的 按照我的解释,这个问题就变成了: 仍在运行的
BackgroundWorker
实例是否会阻止应用程序关闭
这个问题的答案是:不,他们不会。是的,会的。我编写了这个简单的表单,关闭表单将退出应用程序:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
Thread.Sleep(100);
}
}
}
这是一种循环回答。如果后台工作程序在应用程序关闭时未自动停止,则它们将阻止应用程序关闭。除非其
IsBackground
属性设置为false
,这将阻止进程终止。因此答案是正确的;)