планирование задач в vb.net - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть приложение, которое мне нужно автоматизировать, где в определенное время каждый день, например, в 18:00, оно запускает определенный метод (который проверяет базу данных на наличие ключевых терминов и затем обращается к API для поиска этих терминов) , Но есть и другой процесс, который все время работает с доступом к API потока, поэтому, когда поиск завершен, он прерывает поток и передает новые термины. Теперь я думал о добавлении файла .exe в планировщик задач Windows, но не уверен, что это сработает. Потоковый метод выполняется бесконечно, и каждый день в 18:00 должен запускаться другой процесс. Я думал об использовании system.threading.task TaskFactory, но когда я включаю его, он показывает taskfactory как неопределенный. (У меня есть .net Framework 4.0) Если он запускается с использованием планировщика задач как 6 вечера с моей логикой кода следующим образом:

        While True
            'should i run this method as background 
            dim gStream as StreamProcess
            gStream.module1()


            If DateTime.Now.TimeOfDay.ToString = searchTime Then
                addKeywordSearchRules = getSTerms.getNewTerms(addKeywordSearchRules)
                ruleManip.ruleChanges(ruleMethods.Method.ADD, addKeywordSearchRules)
            End If

            Dim gSearch As SearchProcess
            if not addKeywordSearchRules.count = 0 then
               gSearch.module1()
            end if 

        End While

Имеет ли эта логика смысл? Любые другие идеи>

1 Ответ

1 голос
/ 23 ноября 2010

Альтернативой может быть использование объекта system.windows.forms.timer.

  1. Поместите объект таймера в форму
  2. Установите для свойства "Enabled" значение True
  3. Установите для свойства «Интервал» значение 24 часа, то есть (24 * 60 * 60 * 1000, поскольку единица измерения составляет миллисекунды)
  4. В событии "tick" объекта Timer установите его для запуска любой функции, которую вы хотите выполнять каждые 24 часа.

Т.е. сделать что-то вроде следующего, предполагая, что ваш объект Timer называется Timer1:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    'run your desired function here
End Sub

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Ниже приведен пример кода, чтобы сделать эту работу в консольном приложении ...

Imports System.Windows.Forms
Module Module1
    Public WithEvents timer As New System.Windows.Forms.Timer
    Sub Main()
        timer.Enabled = True
        timer.Interval = 500 'replace 500 milliseconds with 24 hours'
        MsgBox("pause")
    End Sub

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer.Tick
        'run your desired method here'
    End Sub

End Module

Незначительные различия:

  1. Вы должны явно импортировать System.Windows.Forms
  2. Внутри вашего модуля вы должны объявите таймер как WithEvents, чтобы ваш модуль получал уведомление о событии «Tick»

Вы можете импортировать system.windows.forms, сначала дважды щелкнув «Мой проект» в проводнике проекта, затем перейдя в «Ссылки», затем нажав «Добавить», затем выбрав вкладку «.Net» и выбрав System.Windows.Forms. Надеюсь, это правильные английские имена, потому что я использую Visual Studio на другом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...