一段时间以来,我一直在使用此代码:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim t2 As New Threading.Thread(AddressOf SetLabelText2)
t2.IsBackground = True
t2.Start()
End Sub
Delegate Sub UpdateDelegate()
Private Sub SetLabelText2()
If InvokeRequired Then
Invoke(New UpdateDelegate(AddressOf SetLabelText2))
Else
For i = 1 To 110
Label2.Text = Text
Threading.Thread.Sleep(200)
Next
End If
End Sub
这段代码运行良好,除了它不是多线程我的应用程序并将其置于无响应状态。
我的问题很简单,1.如何解决这个问题(我将使用的应用程序将有几个函数调用
If InvokeRequired Then
Invoke(New UpdateDelegate(AddressOf SetLabelText2))
Else
FunctionCall1()
FunctionCall2()
FunctionCall3()
End If
他们都工作并掌握了我的 UI 线程。
我一直在寻找很长一段时间,任何帮助表示赞赏。
-Edit- 在线程中从表单中读取信息时也遇到问题... :) 感谢您迄今为止的帮助
编辑 - -
好的,我已经改变了我的代码看起来像
Delegate Sub setForm1PrgBarPerformStepdelegate(s As Integer)
Private Sub setForm1PrgBarPerformStep(ByVal s As Integer)
If Form1.ProgressBar1.InvokeRequired Then
Dim d As New setForm1lblAlltextdelegate(AddressOf setForm1PrgBarPerformStep)
Form1.Invoke(d, New Object() {s})
Else
If s = 1 Then
Form1.ProgressBar1.PerformStep()
Else
End If
End If
End Sub
这段代码是用 setForm1PrgBarPerformStep(1) ' 或 0 调用的
Wich 由我的线程调用,(它可以工作(线程部分 - 女巫很棒顺便说一句),具有不执行执行步骤的小缺陷 - 或我在 Private Sub setForm1PrgBarPerformStep() 中编码的任何其他 UI 更改
这有充分的理由吗?