台灣最大程式設計社群網站
線上人數
980
 
會員總數:246037
討論主題:189624
歡迎您免費加入會員
討論區列表 >> VB.NET >> 跨多執行序問題請教
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
跨多執行序問題請教
價值 : 100 QP  點閱數:257 回應數:0
樓主

小林
門外漢
0 1
64 0
發送站內信

小弟是剛入行的新手

想請問前輩們跨執行序的存取問題

網路上看了很多討論包括本版

還是有點不懂

小弟的目的是要把讀出來的資料一筆一筆的Show出來

小弟目前的程式的運作是這樣

1.Main.vb會New一個frmReadChip.vb的class(Form)跟宣告Public Shared myNedapReader As clsNedepReader(class)

2.點選TabMenu切換至frmReadChip.vb->frmReadChip的Load裡有 Me.myNedapReader = frmMain.myNedapReader

3.點選frmReadChip裡的Button->ButtonClick進入名為ReadThread的Thread裡(一樣寫在frmReadChip.vb裡)

4.Readthread呼叫frmReadChip.myNedapReader這個Function(寫在clsNedepReader裡)

5.最後這個function會把讀到的資料Show出來(要做到讀一筆show一筆)

目前已成功1版但是是很笨的方法
方法及順序如下:
1.把clsNedapReader.vb的所有方法搬到FrmReadChip裡
2.在呼叫讀資料的function(FrmReadChip)的迴圈裡使用Me.Invoke(New invokeDelegate01(AddressOf UpdateResult), txtResult_Text)

錯誤方法有2版

方法1.讓clsNedapReader.vb繼承FrmReadChip,然後一樣使用Me.Invoke(New invokeDelegate01(AddressOf UpdateResult), txtResult_Text)

結果:出現"視窗控制代碼建立後才能呼叫控制項上的 Invoke 或 BeginInvoke"

方法2.在clsNedapReader.vb讀資料迴圈中加入
Dim testthread As frmReadChip = New frmReadChip
Dim thread1 As New System.Threading.Thread(AddressOf testthread.UpdateResult,txtResult_Text)
thread1.Start()

在frmReadChip.UpdateResult加入 Me.InvokeRequired
Public Sub UpdateResult(ByVal strMeg As String)
If Me.InvokeRequired Then
Dim thread2 As New invokeDelegate01(AddressOf UpdateResult)
Me.Invoke(thread2, strMeg)
Else
txtResult.Text = strMeg
End If

End Sub
結果:1.出現{"從字串 ""1." & vbCrLf & "UID: 59382A1E000007E0" & vbCrLf & "book:"" 至類型 'Integer' 的轉換是無效的。"}
2.如把txtResult_Text改為一般字串"test",frmReadChip.UpdateResult裡面接收不到傳進來的string

第一次使用發問不太會表示,希望前輩們見諒,謝謝

搜尋相關Tags的文章: [ 跨Thread ] ,
本篇文章發表於2020-02-27 14:52
目前尚無任何回覆
   

回覆
如要回應,請先登入.