【发布时间】:2009-06-23 19:53:13
【问题描述】:
我有一个列表框,我必须在其中提供至少 2 个文件进行合并。 当我单击合并按钮时,合并完成。进度条启动并出现消息框文件已合并。我正在使用后台工作人员运行进度条。
现在的问题是当合并完成 2 个文件时,我再添加一个文件,单击合并按钮 合并完成消息出现我在消息框上单击确定,再次出现消息框并显示与合并相同的消息已完成。此消息框继续出现我在列表框中添加文件的次数。
例如,对于 2 个文件,消息出现 1ce den 在添加 1 个文件时出现消息 2ice,列表框中出现 1 个文件消息 3ic.Like dis 它继续......
当我使用调试器跟踪它时,我注意到每当我在列表框中添加文件时,我的 Background Worker Runcompleted 事件都会被调用多次。这是合并按钮单击事件的代码...
Worker.DoWork += new DoWorkEventHandler(Worker_DoWork);
Worker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);
Worker.WorkerSupportsCancellation = true;
if (!Worker.IsBusy)
Worker.RunWorkerAsync();
else
MessageBox.Show("Cannot run background worker twice ");
if (Worker.IsBusy)
{
progress = new ProgressDialogDTB();
progress.FormClosing +=
new FormClosingEventHandler(ProgressDialog_FormClosing);
progress.ShowDialog(this);
}
while (Worker.IsBusy)
{
Application.DoEvents();
}
//For Background Worker completed Event...
private void Worker_RunWorkerCompleted(object sender,
AsyncCompletedEventArgs e)
{
if (progress != null)
{
progress.Close();
progress = null;
}
if ( e.Cancelled )
MessageBox.Show(" Progress was cancelled ");
if (e.Error == null)
if (!e.Cancelled)
MessageBox.Show("Files has been merged ");
if (e.Error != null)
MessageBox.Show(e.Error.Message);
}//Worker_RunWorkerCompleted
我不知道我哪里出错了。 请帮忙...谢谢...
【问题讨论】:
-
可以分享一下worker代码吗?什么构成完成?如果它被调用 x 次,那么你的工作人员表示它已完成 x 次是有道理的,要么是因为它是这样工作的,要么它被实例化了 x 次。
-
很多代码,但与问题无关。
-
不知道你的问题。但我会重新考虑:while (Worker.IsBusy){ Application.DoEvents();} 也是。是吃cpu的时间! (或者只是为了测试?)
标签: c# backgroundworker listboxitems