当C#表单关闭时,后台线程是否结束?

时间:2015-10-28 15:13:35

标签: c# multithreading windows-ce

我有一个使用.NET Compact Framework 3.5的C#应用​​程序,它根据用户交互打开多个表单。在一个特定的形式中,我有一个后台线程,定期检查应用程序运行的Windows CE设备的电池寿命。请注意,这不是Main()中调用的表单。例如,Application.Run(new MyOtherForm());中会调用Main()

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()完成处理时)它会停止吗?如果后台线程在应用程序关闭时结束,我发现this解决方法,但如果线程在表单关闭时停止,则似乎没有必要。

编辑:我选择使用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();
}

1 个答案:

答案 0 :(得分:4)

当后台线程完成执行委托时,或者在整个过程中没有更多前台线程时,后台线程将停止执行。