.net 為了安全,默認不允許跨線程訪問操作控件。只能誰創建了控件,誰操作。 這個textbox只能從主線程訪問。 解決方案一般有兩個 1. 使用委托機制。委托創建線程去訪問 2. 設置Me.CheckForIllegalCrossThreadCalls = False 表示不檢測跨線程錯誤
創新互聯建站專業為企業提供雄縣網站建設、雄縣做網站、雄縣網站設計、雄縣網站制作等企業網站建設、網頁設計與制作、雄縣企業網站模板建站服務,十載雄縣做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
并沒有看出什么地方可能導致程序假死,這排版也太亂了.不妨調試一下程序,當出現你說的"假死"后暫停一下程序,看看線程都卡在哪里.
另外,從設計上來看,你這里并不需要多線程操作.
不可以,但是能夠在主線程的基礎上調用委托(Invoke)。(主線程會被占用)
例子:
Dim thr As Threading.Thread
Public Delegate Sub VoidDelegate()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
thr = New Threading.Thread(AddressOf Where)
thr.Start()
End Sub
Public Sub Where()
Me.BeginInvoke(New VoidDelegate(AddressOf WhereThr))
End Sub
Public Sub WhereThr()
Me.TextBox.text="0123456789"
End Sub
(Invoke)這種情況下,主線程被占用,所有由主線程執行程序,都將被(wherethr函數執行結束)后執行。
委托,Delegate
就是讓你處于這個線程里時,委托另一個線程去執行一些動作
我簡單舉一個寫richtextbox的例子:
////////////////////////////////////////////
'創建一個名為 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
/////////////////////
這樣,你在多線程應用時,在其他線程里用txtW(str)來寫richtextbox,就不會產生錯誤了。不然,直接垮線程寫richtextbox,可能會出現和UI線程的沖突。
Delegate?Sub?MySubDelegate(form?As?Form1)
Class?class1
Sub?Sub1(form?As?Form1)
form.Timer1.Enabled?=?True
form.Label1.Visible?=?True
MsgBox("kkk")
End?Sub
End?Class
Private?Sub?DelegateTest()
Dim?c1?As?New?class1
Dim?msd?As?MySubDelegate?=?AddressOf?c1.Sub1
Me.Invoke(msd,Me)
End?Sub
分享名稱:vb.net中多線程委托,net多線程與委托
網站網址:http://m.kartarina.com/article12/dseejdc.html
成都網站建設公司_創新互聯,為您提供用戶體驗、虛擬主機、標簽優化、App開發、微信小程序、網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯