2013-04-22 2 views
1

У меня есть простой вопрос о рабочем столе. Я никогда не использовал его, поэтому у меня нет идеи о том, как это работает. Я использую VB.NET express 2010. Все, что я хочу сделать для мониторинга базы данных в backgroundWorker формы.Могу ли я использовать backgroundWorker после вызова метода hide в VB.NET

Вот несколько вещей, которые я пытаюсь достичь.

  1. Мониторинг файла SQLite DB с помощью оператора select.
  2. Извлечение данных из БД и их включение в переменные.
  3. Сравните значения с определенными условиями и если что-то соответствует, передайте значения в другую форму и вызовите их.
  4. Продолжайте следить.
  5. Я хочу, чтобы рабочий стол делал это, когда вызывается метод формы form.hide().

Просьба дать ценный ответ, и если вы не знаете правильный путь, предложите другой вариант.

+0

Возможно ли разместить подобное событие, которое вы имеете в виду? – Paparazzi

+0

Это что-то вроде: Form1, внутри Form1 У меня backgorundWorker. если пользователь нажимает кнопку отмены, он скрывает форму Form1. Если пользователь нажимает любую кнопку Add, Edit в другой форме, скажем, Form2, он создает новый экземпляр Form1 и закрывает старый one.backgorundWorker называется OnLoad – SOAMad

+0

Определите, что вы хотите в вопросе. Сначала это была спрятана и теперь отменила OnLoad. – Paparazzi

ответ

1

Скрытие формы не остановит работника фона - на самом деле закрытие формы не остановит ее - форма будет ждать, пока фоновое рабочее свойство isBusy сообщит об ошибке перед продолжением.


Обновление в ответ на новый комментарий

Вы, вероятно, лучше всего использовать таймер и разгружая другую работу в новом потоке, смотрите пример ниже. Если операция не завершена, то 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

+0

Если вы правильно поняли, вам нужно будет включить свойство «WorkerSupportsCancellation» и вызвать рабочий стол .CancelAsync() для рабочего, прежде чем закрыть форму. Чтобы начать работу, когда форма загружается, просто вызовите .RunWorkerAsync() в методе Load Load. – GJKH

+0

Свойство isBusy - это флаг только для чтения, когда рабочий запускается, свойство будет установлено в true, когда оно остановлено, оно будет ложным. – GJKH

Смежные вопросы