不知道我的標題的措辭以及停止工作,從一個線程,但無論:)使用另一個線程
我有兩個線程:主線程與需要做的工作,一個工作線程包含帶進度條和取消按鈕的表單。在正常的代碼中,這將是另一種方式,但在這種情況下我不能這樣做。
當用戶點擊取消按鈕時,會顯示一個提示,詢問他是否真的要取消工作。問題在於主線程繼續工作。我可以通過主線程停止工作等,但是當他點擊提示上的「是」時,我想讓它停止工作。
例子:
// Main thread work starts here
t1 = new Thread(new ThreadStart(progressForm_Start));
t1.Start();
// Working
for (i = 0; i <= 10000; i++)
{
semaphore.WaitOne();
if (pBar.Running)
bgworker_ProgressChanged(i);
semaphore.Release();
if (pBar.IsCancelled) break;
}
t1.Abort();
// Main thread work ends here
// Start progress bar form in another thread
void progressForm_Start()
{
pBar.Status("Starting");
pBar.ShowDialog();
}
我在理論上包括在cancelWatch()函數的提示,但後來我不得不做,到處都是我實現這個類。
爲什麼你不能把表單放在主線程中,並簡單地使用Swing WorkerThread?這看起來很複雜。 「普通代碼」的含義 – 2010-06-18 16:15:41
「普通代碼」我的意思是我一開始就會想到這樣做。 我不能把表單放在主線程中,因爲我需要能夠在任何時候實際點擊取消按鈕來取消操作。但是我不能使用BackgroundWorker,因爲我不想在這裏使用異步線程。 主線程已經是一個顯示數據並在後臺執行一些操作的窗體。我需要一個進度條和一個取消按鈕,然後在主窗體上進行操作幾乎是不可能的。 – duraz0rz 2010-06-18 16:34:12