委托,Delegate
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了水城免費(fèi)建站歡迎大家使用!
就是讓你處于這個線程里時,委托另一個線程去執(zhí)行一些動作
我簡單舉一個寫richtextbox的例子:
////////////////////////////////////////////
'創(chuàng)建一個名為 MySubDelegate 的委托。
Delegate Sub MySubDelegate(ByVal txt As String)
'寫信息到富文本主窗口
Private Sub txtW(ByVal txt As String)
Dim msgd As New MySubDelegate(AddressOf Me.txtW1)
Dim arg(0) As Object
arg(0) = txt
Me.Invoke(msgd, arg)
End Sub
'委托指向
Private Sub txtW1(ByVal txt As String)
Me.RichTextBox1.AppendText(txt)
End Sub
/////////////////////
這樣,你在多線程應(yīng)用時,在其他線程里用txtW(str)來寫richtextbox,就不會產(chǎn)生錯誤了。不然,直接垮線程寫richtextbox,可能會出現(xiàn)和UI線程的沖突。
Sub bc()
Dim cs As New qq163(AddressOf js)
Application.DoEvnts
Invoke(cs)
End Sub
.net 為了安全,默認(rèn)不允許跨線程訪問操作控件。只能誰創(chuàng)建了控件,誰操作。
這個textbox只能從主線程訪問。
解決方案一般有兩個
1. 使用委托機(jī)制。委托創(chuàng)建線程去訪問
2. 設(shè)置Me.CheckForIllegalCrossThreadCalls = False 表示不檢測跨線程錯誤