private void Form1_Load(object sender, EventArgs e)
{
this.timer1.Enabled = true; label3.Text = Convert.ToString(DateTime.Now.TimeOfDay).Substring(0, 8);
} private void timer1_Tick(object sender, EventArgs e)
{
label3.Text = Convert.ToString(DateTime.Now.TimeOfDay).Substring(0, 8);
} private void button1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
backgroundWorker1.RunWorkerAsync(this.textBox2.Text);
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker work = (BackgroundWorker)sender;
e.Result = CheckAlarm(e.Argument.ToString(), work, e);
}
private bool CheckAlarm(string str, BackgroundWorker work, DoWorkEventArgs e)
{
while (true)
{
if (work.CancellationPending)
e.Cancel = true;
else
{
if (label3.Text == str)
return true;
}
}
} private void button2_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
MessageBox.Show(e.Error.Message);
else if (e.Cancelled)
{
MessageBox.Show("Cancelled");
}
else
{
Application.Exit();
}
}这是一个backgroundwork的教学事例 但是有个问题 就是 这个backgroundwork不能cancel
如果运行以后cannel 在重新set
就会报"backgroundwork 无法运行多个任务的" 错误
代码奉上 好心人能否帮助我解决或者告诉我报错的原因
我先前做了一个10000个整数的连加程序 就可以cancel 在重新set就不报错
但是我发现不了两段代码有什么区别
解决方案 »
- 如何获取安装包SETUP所在的目录
- string [,,,,,] ar = new string[33,33,33,33,33,33];错出?(C#)
- 如何控制一个窗体只能打开一次
- WinFrom lable 换行
- 问一个SQL语句
- 保存在数据库中的文件,取出后另存为相应的文件,却用相应的软件不能打开,如WORD另存为XX.doc??
- ~~~~~~~~向星星家族和各位大哥们求救,关于excel!!~~~~~~~~~~
- 关于文件读写的问题,百思不得其解
- SqlDataAdapter 如何填充DataSet ?看我的做法错在哪里?
- 如果在帮定的dropdowns最前面添加一个我自己的东西?
- 小弟我在一公司实习项目遇到的问题
- -1与null能否作为逻辑判断?
{
this.backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;
}
我想你cancel的这段需要修正为:
private void button2_Click(object sender, EventArgs e)
{
if(this.backgroundWorker.CancellationPending) return; if(this.backgroundWorker.IsBusy)
{
this.backgroundWorker.CancelAsync();
return;
}
} 试试看吧,希望有帮助。
private bool CheckAlarm(string str, BackgroundWorker work, DoWorkEventArgs e)
{
while (true && !e.Cancel)
{
if (work.CancellationPending)
{
e.Cancel = true;
}
else
{
if (label3.Text == str)
return true;
}
} return false;
}
[/code]