iCa*_*arn 2 c# backgroundworker winforms
这是我到目前为止所尝试的:
放入button.Visible = false我的表单的初始化程序,并button.Visible = true结束我的backgroundWorkers的DoWork事件.
这会导致程序在BackgroundWorker完成其工作后冻结.
我不明白为什么.
放入button.Visible = false我的表单的初始化程序并button.Visible = true在我的backgroundWorker1.RunWorkerAsync()调用之后.
这不能正常工作,因为它在BackgroundWorker开始工作后立即显示按钮.
我明白为什么会这样.
button.Visible = false与doneEvent = new AutoResetEvent(false)入我的窗体的初始化,然后把doneEvent.WaitOne()和button.Visible = true我的后backgroundWorker1.RunWorkerAsync()调用.当代码在DoWork事件中运行时,不应该在按钮上调用任何方法/属性,因为此代码与创建按钮的线程位于不同的线程中.
该BackgroundWorkwer使用一个定义良好的组事件来处理,你需要更新你的接口的情况下,你应该使用这些事件该任务.
例如,您可以将该属性设置WorkerReportsProgress为true,订阅该事件ProgressChanged并backgroundWorker1.ReportProgress(...);在DoWork事件内调用以在后台工作进度时更新您的界面.
在您的情况下,您可能需要订阅该活动RunWorkerCompleted并在该活动中显示您的按钮
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!e.Cancelled && e.Error == null)
{
button.Visible = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在BackgroundWorker的MSDN页面链接中,有一个示例演示了在DoWork事件运行复杂任务时如何更新进度条.
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |