我的代碼有問題。我創建一個圖形應用程序,它有一個主要的形式。當我點擊一個按鈕時,我創建了一個新的窗體,在導出某些文件時顯示進度條。我的問題開始時,我嘗試關閉進度欄的窗體,因爲方法導出文件不結束。關閉窗體時停止線程中的運行方法
在新窗體中,我執行一個方法來檢查導出的進度並填充進度條,每秒執行一次該方法。要導出我創建一個新的線程,並且這個線程執行導出方法。
如果輸出完成,表單和線程關閉正確的方式,但如果我通過關閉窗體「強制」停止操作,導出線程不會停止,直到導出結束或當我關閉主窗體時。
那麼,我該如何阻止該線程?
這是我的代碼:
public Form3(File file, string output, string inputFile)
{
InitializeComponent();
this.file = file;
this.output = output;
this.inputFile = inputFile;
progressLabel.Location = new Point(textProgress.Right, progressLabel.Top);
thread = new Thread((ThreadStart)delegate { Exporter.ExportToFile(this.file, this.output, this.inputFile); });
thread.IsBackground = true;
thread.Start();
TimerControl();
}
private void TimerControl()
{
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Tick += new EventHandler(GetProgress);
t.Interval = 1000; // in miliseconds
t.Start();
}
private void GetProgress(object sender, EventArgs myEventArgs)
{
int x = Exporter.GetProgress();
progressBar.Maximum = 100;
if (!Exporter.stop)
{
progressBar.Value = x;
progressLabel.Text = x.ToString() + "%";
}
else
{
this.Close();
}
}
要做到這一點,你需要添加取消支持'Exporter.ExportToFile()' –
殘酷,但(有點)有效:在你的'閉嘴'事件調用'thread.Abort()' - 任何其他方法當然更可取。 –
這是可怕的建議。 ['永遠不要調用Thread.Abort()'](http://stackoverflow.com/questions/1559255/whats-wrong-with-using-thread-abort)。 –