Как заставить службу windows выполнять тот же код с помощью таймера vb.net - PullRequest
1 голос
/ 28 января 2012

РЕДАКТИРОВАТЬ

Оказывается, есть исключение:

dictionary error

То, что я хочу, это для словарных ключей и элементовперезаписываться при каждом выполнении, так как данные должны быть актуальными.Есть ли способ сделать это, чтобы решить мою проблему?

Ответы [ 3 ]

0 голосов
/ 28 января 2012

Похоже, это наиболее вероятное объяснение состоит в том, что выдается исключение. Установите интервал на что-то более длинное и установите его перед включением таймера. Затем подключитесь к вашему сервису с помощью отладчика и посмотрите, что произойдет.

0 голосов
/ 28 января 2012

Попробуйте что-то вроде этого:

Public Sub DoNextExecution()
    SyncLock Me
        thisTimer.Stop()

        Try
            GetInfo()
            GetUsers()
            GetProcess()
            GetServices()
            GetCPU()
            GetMem()
            WriteXML()
        Catch ex as Exception
            ' TODO: Log the exception somehow!
        End Try

        ' Another execution cycle begins.

        thisTimer.Start()
    End SyncLock
End Sub

Примечание: вам не нужно устанавливать AutoRestart таймера в true или вызывать Stop (), если вы собираетесь вызывать метод Start таймера каждый тик.

0 голосов
/ 28 января 2012

Вот как я это сделаю в сервисе (я склонен следовать довольно похожему шаблону при написании сервисов, однако я не был уверен в вашей временной задержке - вы хотели 10 секунд между созданием файла или начинать создавать файл каждый раз? 10с? Это тонкая разница, но представьте, что произойдет, если создание файла займет, скажем, 30с ...)

Private Shared ReadOnly SleepTime As New TimeSpan(0, 0, 10)
Private _stopService As Boolean
Private _thread As Thread

Public Sub OnStart()

    _stopService = False

    _thread = New Thread(AddressOf DoWork)
    _thread.Name = "File Creation Thread"
    _thread.Start()

End Sub

Public Sub OnStop()

    _stopService = True
    _thread.Join()

End Sub

Private Sub DoWork()

    While Not _stopService

        GetInfo()
        GetUsers()
        GetProcess()
        GetServices()
        GetCPU()
        GetMem()
        WriteXML()

        Thread.Sleep(SleepTime)

    End While

End Sub
...