thấy câu hỏi cũng có lý nên acx cũng đọc sơ qua về backgroundworker và thử như vầy, cũng chưa nắm rõ cái này lắm, nhưng mà acx ko thấy cái nào đề dừng cái backgroundworker này ngoại trừ việc tạm dừng (như yêu cầu) và giải phóng nó luôn
Code:
BackgroundWorker bw = new BackgroundWorker();
void bw_Disposed(object sender, EventArgs e)
{
this.Text = "Disposed";
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bwAsync = sender as BackgroundWorker;
if (bwAsync.CancellationPending)
{
Thread.Sleep(1000);
e.Cancel = true;
return;
}
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null) { this.Text = e.Error.Message; return; }
}
BackgroundWorker bw;
private void button1_Click(object sender, EventArgs e)
{
if(bw==null)
{
bw= new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.Disposed += new EventHandler(bw_Disposed);
}
bw.CancelAsync();
IsRunning(bw);
if (MessageBox.Show("Stop?","Stop???",MessageBoxButtons.YesNo) != DialogResult.Yes)
{
bw.RunWorkerAsync();
IsRunning(bw);
}
else
{
bw.Dispose();
}
}
void IsRunning(BackgroundWorker b)
{
if (b != null && b.IsBusy) { this.Text = "Running";}
else { this.Text = "Free";}
}
Bookmarks