有一段時間了,我一直在使用此代碼:嘗試 - 多線程 - 在VB.net Windows窗體
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.How可以解決這個問題(我將使用將有幾個功能的應用程序調用內
If InvokeRequired Then
Invoke(New UpdateDelegate(AddressOf SetLabelText2))
Else
FunctionCall1()
FunctionCall2()
FunctionCall3()
End If
他們所有的工作,並採取抓住我的UI線程的。
我一直在尋找了一段時間,任何幫助表示讚賞。
CNC中 也有問題,而在一個線程從一種形式的幫助讀取信息... :)感謝到目前爲止
編輯---
好吧,我改變我的代碼到處尋找像
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
至極(它的工作原理(線程部分 - 女巫真棒順便說一句),與不執行執行步驟的小缺陷 - 或任何其他UI更改我在私人小組中的代碼setForm1PrgBarPerformStep()
有沒有很好的理由呢?
Aliright,我會嘗試這種解決方案,因爲我不知道如何即刻調用所有的UI調用內的功能,在我的設置標籤文本子內...你說每個用戶界面變化不得不創建一個單獨的子,並調用它們? – Pakk
@ user2236967您不必爲每次調用需要調用的方法/設置器/獲取器的單個調用創建一個子對象。您可以捆綁這些電話。只要確保你的Invoke()方法做的工作很少,並且很快就會返回,因爲每個Invoke()調用都會阻止UI的完成。在調用「Invoke()' – wborgsm
」)之間完成的艱難工作哇,這很糟糕的樣子,將把這個放到上面的編輯中 – Pakk