2013-04-22 40 views
1

我有一個關於後臺工作者的簡單問題。我從來沒有使用它,所以我不知道它是如何工作的。 我正在使用VB.NET express 2010. 所有我想要在窗體的backgroundWorker中進行數據庫監視。在VB.NET中調用隱藏方法後我可以使用backgroundWorker嗎

這是我想要實現的一些事情。

  1. 使用select語句監視SQLite數據庫文件。
  2. 從數據庫提取數據並將其放入變量。
  3. 將值與某些條件進行比較,如果某些條件匹配,則將值傳遞給另一個表單並調用它。
  4. 繼續監測。
  5. 我希望後臺工作者在調用表單的form.hide()方法時執行此操作。

請給出您的寶貴迴應,如果我不是正確的方式,請建議另一個如此。

+0

可以發佈一個類似你所指的隱藏事件嗎? – Paparazzi 2013-04-22 20:49:29

+0

它是這樣的:在Form1裏面的Form1我有backgorundWorker。如果用戶按取消按鈕,則隱藏Form1。如果用戶按其他窗體上的任何添加,編輯按鈕讓我們說Form2,它創建Form1的新實例並關閉舊的.backgorundWorker被稱爲OnLoad – SOAMad 2013-04-22 20:50:50

+0

定義你想要的問題。首先它是隱藏的,現在取消OnLoad。 – Paparazzi 2013-04-22 21:01:08

回答

1

隱藏表單不會阻止後臺工作人員 - 實際上關閉表單不會阻止它 - 表單將等待後臺工作人員isBusy屬性在繼續之前報告false。


更新以應對新評論

你會使用定時器和卸載其他工作提高到一個新的線程可能是最好的,見下面的例子。如果操作未完成,則If _worker is nothing將停止操作重新啓動。請務必在過程結束時設置_worker = nothing,以使其工作。

此外,我剛剛輸入了這個快速,它可能無法工作,但應該給你一個出發點。

Imports System.Threading 

Public Class Form1 

    Dim _worker As Thread 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     Timer1.Interval = 10000 
     'interval in milliseconds so 1000ms = 1 second/above 10000 = 10 seconds 

     Timer1.Enabled = True 
     Timer1.Start() 

    End Sub 

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
     StartWorkerThread() 
    End Sub 

    Private Sub StartWorkerThread() 

     If _worker Is Nothing Then 
      _worker = New Thread(AddressOf myWorker) 
      _worker.Start() 


     End If 

    End Sub 

    Private Sub myWorker() 
     'do your work here...use an event or a delate to fire another sub/function on the main thread if required 

      'when finished 
      _worker = nothing 
      'Important! This will allow the operation to be started again on the timer tick 
     End Sub 

    End Class 
+0

謝謝你的回覆。當需要爲其他操作調用相同的表單時,我正在關閉窗體。你能告訴我,如果我關閉form1,我怎樣才能關閉後臺工作人員,當我調用相同的窗體時,如何再次啓動後臺工作?並使用isbusy屬性 – SOAMad 2013-04-23 19:12:07

+0

如果我正確理解您,您需要在關閉表單前啓用「WorkerSupportsCancellation」屬性並調用Worker上的.CancelAsync()。 當表單加載時,只需在表單加載方法中調用.RunWorkerAsync()即可讓工作人員啓動。 – GJKH 2013-04-26 12:53:27

+0

isBusy屬性是一個只讀標誌,當worker啓動時該屬性將被設置爲true,當它停止時它將爲false。 – GJKH 2013-04-26 12:54:24

相關問題