2013-04-22 79 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

相关问题