当C#窗体关闭时,后台线程是否结束
本文关键字:后台 线程 是否 结束 窗体 | 更新日期: 2023-09-27 18:19:41
我有一个使用.NET Compact Framework 3.5的C#应用程序,它根据用户交互打开多个表单。在一个特定的表单中,我有一个后台线程,它定期检查应用程序运行的Windows CE设备的电池寿命。注意,这不是Main()
中调用的表单。例如,在Main()
中调用Application.Run(new MyOtherForm());
。
public MyForm()
{
Thread mythread = new Thread(checkBatteryLife);
mythread.IsBackground = true;
mythread.Start();
}
private void checkBatteryLife()
{
while(true)
{
// Get battery life
Thread.Sleep(1000);
}
}
我的问题是,当MyForm
关闭时,后台线程是否也会停止?还是在应用程序存在时(Main()
完成处理时)停止?如果后台线程在应用程序关闭时结束,我找到了这种解决方法,但如果线程在表单关闭时停止,则似乎没有必要。
编辑:我选择使用System.Threading.Timer
而不是Thread
。
private System.Threading.Timer batteryLifeTimer;
public MyForm()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
TimerCallback tcb = checkBatteryLife;
this.batteryLifeTimer = new System.Threading.Timer(tcb, autoEvent, 1000, 10000);
}
private void checkBatteryLife(Object stateInfo)
{
// Get battery life.
// Update UI if battery life percent changed.
}
private void MyForm_Closing(object sender, CancelEventArgs e)
{
this.batteryLifeTimer.Dispose();
}
后台线程在完成委托执行或整个进程中不再有前台线程时将停止执行。