通常使用C#中的backgroudWorker都會去定時執行固定的工作,例如每秒更新一次的小時鐘,但是在關閉視窗的時候會出現報錯,原因就在於視窗關閉的當下,backgroundWorker還在工作,所以關閉的時候要能夠將backgroundWorker工作停止,有兩個方式。
第一種方式:在backgroundWorker的while迴圈中設計開關,如下:
...
private void BackgroundWorkerABC_DoWork(object sender, DoWorkEventArgs e)
{
while (myFlag) // myFlag等於true的時候才運作
{
...
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
myFlag = false; // 關閉視窗的時候停止它
}
...
第二種方式:宣告一個成員變數,然後參考(Reference)指定過去,最後關閉視窗的時候中斷他
using System;
...
namespace MyTest
{
public partial class Form1 : Form
{
...
private Thread WorkingThread = null; // 宣告一個成員變數
...
private void BackgroundWorkerABC_DoWork(object sender, DoWorkEventArgs e)
{
WorkingThread = Thread.CurrentThread; // 工作執行,把這個工作的執行續(Reference)指定進成員變數中
...
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (WorkingThread != null) WorkingThread.Abort(); // 關閉視窗的時候中斷它
}
...