[VB2005]工作緒變更畫面控制項的值

在 VB2005 由於安全性增強,並不允許工作執行緒 (work thread) 變更主執行緒 (gui thread) 所建立的控制項,最常見的就是進度列 (Process Bar) ,會希望藉由子執行緒執行過程中,逐步更新主執行緒畫面上的進度列或是狀態列,另外,凡是採用非同步宣告或方法的控制項,亦會建立子執行緒,此時無法變更主執行緒或其他執行緒的控制項。
 
VB2005 線上手冊有建議採用 BackgroundWorker 控制項,但 BackgroundWorker 控制項並不適用於每種情況,因此仍然有需求以工作緒的方式變更。
 
假設主畫面 frmMain 有個 StatusBar 顯示目前狀態,子執行緒 subThread 需要變更目前狀態。
 
一般寫法:
Public Class frmMain
   Public Sub HelpBar(Byval strHelp As String)
      StatusBar.Text = strHelp
   End Sub
      HelpBar("執行中") ‘ 呼叫時
End Class
 
多執行緒委派寫法:
Public Class frmMain
   Delegate Sub DelegateHelpBar(ByVal strHelp As String) ‘ 委派的介面,須與執行的副程式相同
 
   Public Sub HelpBar(Byval strHelp As String)
      StatusBar.Text = strHelp
   End Sub
      Me.BeginInvoke(New DelegateHelpBar(AddressOf HelpBar), New Object() {"執行中"}) ‘ 開始委派呼叫
End Class
 
當然,也可以把委派的動作改在副程式 HelpBar 內呼叫,變成重新包裝一個副程式,或是把委派的動作做成通用界面,讓呼叫更方便。
 
這邊只是做一個最簡單的範例讓使用者可以盡量在不修改其他部分程式碼的狀況下,達成委派呼叫。
廣告
Categories: 技術分享 | 3 則迴響

文章分頁導航

3 thoughts on “[VB2005]工作緒變更畫面控制項的值

  1. 子璉

    這是一個封包監聽的網路範例,原先的網路範例使用 VBNET 開發,在 VB2005 執行會有問題,故示範以此方法委派讓非同步的 socket 能夠更新畫面:
    http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1024049&SiteID=14

    新位置:
    http://social.msdn.microsoft.com/forums/zh-TW/230/thread/83a6d495-35b8-4fc8-ad03-327d86702cc7/

    按讚數

  2. 登傑

    我在微軟的討論區有看到這個包監聽的網路範例,可是我在跳出試窗的解碼部份一直找不到正確的方式
    frmPacket.vb這個跳出視窗中的
     RawText.Text = m_Packet.ToString()
    改成System.Text.Encoding.ASCII.GetString(m_Packet.GetBytes())
    卻一直得不到正確的資訊,可否請璉大教一下要如何取回正確的資料
    謝謝。
     
     

    按讚數

  3. 子璉

    針對該篇封包攔截討論,請在該討論續進行後續討論。這篇主題並不是討論封包攔截的…

    按讚數

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: