//这是我的代码
private void btnGenSumm_Click(object sender, EventArgs e)
{
if (backgroundWorker1.IsBusy != true)
{
btnGenSumm.Enabled = false;
btnExpSum.Enabled = false;
btnClose.Enabled = false;
pBox1.Visible = true;
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
loadSummSales(); // this is the process
System.Threading.Thread.Sleep(50);
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
pBox1.Visible = false;
}
第一次单击时执行进程没有错误,但是当我尝试再次单击命令按钮(btnGenSumm)重复进程时,我收到错误“在执行createhandle时无法调用值dispose”。请帮帮我。
答案 0 :(得分:0)
我会在开始任务之前创建一个新工人;这避免了这些问题。
private void btnGenSumm_Click(object sender, EventArgs e)
{
// WorkerFactory creates your worker and hooks up the DoWork
// and RunWorkerCompleted events
var backgroundWorker1 = WorkerFactory();
// ...
// Disable access to this Click event in the UI here
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
// Re-enable access to the Click event in the UI here
}
使用这种方法,工作人员无法在其运行时访问,并且无论何时用户单击按钮,最后一名工作人员已完成并且没有令人讨厌的IsBusy
软糖。 / p>
<强>更新强>
明确WorkerFactory
做类似的事情
private BackgroundWorker WorkerFactory()
{
var worker = new BackgroundWorker();
worker.DoWork += backgroundWorker1_DoWork;
worker.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
return worker;
}