【发布时间】:2011-10-14 10:14:29
【问题描述】:
我无法取消其中包含 Thread.Sleep(100) 的后台工作人员。
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
int count;
try
{
count = int.Parse(textBox3.Text);
for (int i = 0; i < count; i++)
{
backgroundWorker1.ReportProgress((int)(((double)(i + 1) / count) * 1000));
//Computation code
Thread.Sleep(int.Parse(textBox4.Text));
}
}
catch (Exception ex)
{
request.DownloadData(url);
MessageBox.Show(ex.Message);
}
}
private void cancel_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
progressBar1.Value = 0;
}
如果我删除了Thread.Sleep(100),那么取消操作会起作用,否则它会继续进行(进度条不会停止)。
编辑:添加其余代码
【问题讨论】:
-
你能发布循环的其余部分吗?它是否在每次迭代时检查一些标志?减少睡眠时间,比如说 1 解决问题吗?
-
Sleep(100) 正在处理循环中?
-
代码不完整。只是 Sleep(100) 调用只能延迟取消一点。一定有别的东西。
-
stackoverflow 上有一个类似的问题。见stackoverflow.com/questions/800767/…
-
好吧,我唯一添加的就是将 Sleep(100) 放在 try-catch 中。
标签: c# winforms backgroundworker thread-sleep