我很困惑。是的,我知道我不能使用相同的背景工作者同时完成两个任务。我不明白的是这个。这是我的代码(所有这一切都设置了进度条的marqueeanimationspeed ......
'THE FOLLOWING SUB TOGGLES THE PROGRESS BAR
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'CHECK THE STATE OF THE PROGRESS BAR AND TOGGLE IT
If ToolStripProgressBar1.MarqueeAnimationSpeed = 0 Then
ToolStripProgressBar1.MarqueeAnimationSpeed = 22
End If
ToolStripProgressBar1.MarqueeAnimationSpeed = 0
End Sub
好的,这可能需要多长时间?工人不做任务并退出吗?所以我暂停了一下(system.threading.thread.sleep(2000)......同样的问题,做了20秒......同样的问题。
所以我假设这是一件我想念的简单事情,但是我花了一个多小时搜索,但我没有得到它。
我想在这里完成的是在UI运行其他内容时启动选取框进度条,然后停止它。我假设我可以创建另一个背景工作者并使用它,但我想理解为什么第一个没有完成任务。
谢谢,再次,是的,我花了一个小时的时间搜索,我找到各种“解决方案”,但没有解释为什么这件事没有完成。
好的,所以这就是要求BGW
'THE FOLLOWING SUB FIRES THE SETTING CONNECTION STRINGS SUB
Private Sub SetCSButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetCSButton.Click
'START THE PROGRESS BAR & CHANGE THE LABEL
BackgroundWorker1.RunWorkerAsync()
Threading.Thread.Sleep(1000)
ToolStripStatusLabel1.Text = "Preparing the connection strings..."
Me.Refresh()
thread3 = New System.Threading.Thread(AddressOf SetConnectionStrings)
thread3.Start()
'STOP THE PROGRESS BAR & CHANGE THE LABEL
BackgroundWorker2.RunWorkerAsync()
Threading.Thread.Sleep(1000)
ToolStripStatusLabel1.Text = "Standing by..."
Me.Refresh()
End Sub**strong text**
我有20秒的延迟,但仍然是第一个BGW没有完成。我知道这很简单,但我不明白,这就是我在这里的所有内容。
我DID更改代码并且不使用我在编写此问题时尝试的相同方法...我不明白为什么简单的操作从来没有,显然,完成...说因为我能够使用runworkercompleted事件显示一个msgbox,所以它完成了。因此,正如我尝试并未能传达的那样,thbis不是关于正确或错误的编码方式,我知道这是错误的,只是想快速和肮脏,不管那样,我现在不是那样做,但我不明白为什么BGW“仍在工作”。必须有一些我无知的简单事情。
由于
答案 0 :(得分:1)
错误不在发布的代码中,而是在启动Bgw的位置。
但这一切都无关紧要,因为你不应该从DoWork触摸GUI:
Private Sub BackgroundWorker1_DoWork(...) Handles BackgroundWorker1.DoWork
'CHECK THE STATE OF THE PROGRESS BAR AND TOGGLE IT
If ToolStripProgressBar1.MarqueeAnimationSpeed = 0 Then ' Boom, cross-threading violation
ToolStripProgressBar1.MarqueeAnimationSpeed = 22
End If
我不认为你需要一个Bgw,线程或计时器。只需在慢动作之前/之后改变速度。