2011-06-07 51 views
1

問教程中,我有一個名爲TestClass的的VB.NET線程

Public Class TestClass 

    Private _Count As Integer 


    Public ReadOnly Property Count() As Integer 
     Get 
      For i As Integer = 0 To 999999999 
       Threading.Thread.Sleep(100) 
      Next 

      Return 100 
     End Get 
    End Property 

End Class 

形成主窗體類,我調用類。這裏是我的代碼:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim tg As New TestClass 
    MsgBox(tg.Count) 

End Sub 

當我從主窗體調用tg.Count時,主窗體將不會響應。如何防止我的表單不響應。用戶可以訪問其他菜單而不是等待結果。誰能幫我?

回答

2

使用BackgroundWorker在工作線程中運行它。這將保持您的GUI響應。 http://www.dreamincode.net/forums/topic/88605-the-background-worker/

BackgroundWorker組件網絡從工具箱拖到窗體上。現在,將您的計數器循環放入您自動生成的BackgroundWorker_DoWork事件處理程序中。您現在需要做的就是致電RunWorkerAsync

希望它能幫助!

+0

我知道如何使用後臺工作。但是,我想知道如何將價值返回給它的來電者。你有沒有看過短信庫?當我調用msgbox(objGSM.IMEI)時,我可以訪問應用程序中的其他菜單,而不用等待對象處理結果。 – Steven 2011-06-07 18:21:04

+0

您可以直接將值返回給GUI對象,並將其放在try ... catch塊中。然後,跨線程調用不會大驚小怪。我仍然不明白你的問題。 – 2011-06-07 18:29:50

+1

+1:儘管如此,我確實爲自己改進了格式和語法。 – 2011-06-07 18:34:29

0

您的循環正在從0循環到999999999,並且每循環中斷當前線程的延遲時間爲100毫秒。更好的解決方案是使用定時器,檢查完成的條件並在必要時重新啓動定時器。這樣,您的主窗體線程將始終具有響應性。

+0

我知道如何使用後臺工作者。但是,我想知道如何將價值返回給它的來電者。你有沒有看過短信庫?當我調用msgbox(objGSM.IMEI)時,我可以訪問應用程序中的其他菜單,而不用等待對象處理結果。 – Steven 2011-06-07 18:21:16