У меня есть служба Windows с использованием таймера, который не идеален для того, что я хочу сделать. У меня есть метод, который я хочу позвонить, и как только его финиш, я хочу, чтобы он начинался снова и снова и снова. Каков наилучший способ сделать это, и вы можете показать мне пример.Windows Service looping - Как?
ответ
Можете ли вы объяснить немного больше того, что вы пытаетесь достичь.
При использовании таймера в Сервисе вам необходимо использовать System.Threading.Timer.
Если вы постоянно зацикливаете, то ваше использование процессора будет проходить через крышу. Если вы пытаетесь контролировать каталог, вы можете использовать FileSystemWatcher, но это может быть проблематичным, если на вашем компьютере не работает Windows. Если вы пытаетесь запросить таблицу и получить результаты, вы можете просмотреть ее каждые 15 секунд для новой записи, и если новая запись существует, отметьте функцию как запущенную с помощью булева, чтобы, если она все еще работает через 15 секунд, она не снова запустить.
Я приведу вам пример таймера в системной службе.
Private myThreadingTimer As System.Threading.Timer
Private blnCurrentlyRunning As Boolean = False
Protected Overrides Sub OnStart(ByVal args() As String)
Dim myTimerCallback As New TimerCallback(AddressOf OnTimedEvent)
myThreadingTimer = New System.Threading.Timer(myTimerCallback, Nothing, 1000, 1000)
End Sub
Private Sub OnTimedEvent(ByVal state As Object)
If Date.Now.Second = 1 Or Date.Now.Second = 15 Or Date.Now.Second = 30 Or Date.Now.Second = 45 Then
If Not blnCurrentlyRunning Then
blnCurrentlyRunning = True
Dim myNewThread As New Thread(New ThreadStart(AddressOf MyFunctionIWantToCall))
myNewThread.Start()
End If
End If
End Sub
Public Sub MyFunctionIWantToCall()
Try
'Do Something
Catch ex As Exception
Finally
blnCurrentlyRunning = False
End Try
End Sub
Проблема, связанная с моим таймером, - это запуск 2-го/3-го раза до того, как 1-й будет завершен. но мне нужно, чтобы время опроса было как можно меньше, например. 2-е, вот почему я спрашиваю о цикле. – MartGriff
Итак, вам нужно реализовать логическое значение, чтобы узнать, выполняется ли его текущий запуск, и если его текущий запуск не выполняет повторную выполнение функции/кода. В основном то же, что и выше. Вы можете изменить код, чтобы он срабатывал каждые 2 секунды, если вам нравится, добавляя больше или предложение к функции OnTimeEvent. – Zman101
private AutoResetEvent m_waitNextExec = new AutoResetEvent(false);
private int m_execTimer = 1000; //Every second
private bool m_isRunning = true;
private void SomeMethod()
{
while (m_isRunning)
{
//Do something
m_waitNextExec.WaitOne(m_execTimer);
}
}
Этот код дает вам больший контроль над выполнением вашего кода. Событие автоматического сброса дает вам возможность уменьшить скорость выполнения.
Если вы хотите прервать выполнение, вы просто должны сделать:
m_isRunning = false;
m_waitNextExec.Set();
Может ли это вызвать проблему на стеке? если работает 24/7 – MartGriff
- 1. Looping service call in Extjs
- 2. windows Service/Web Service
- 3. windows service
- 4. Как откат в Windows Service?
- 5. C# Windows Service Textwriter
- 6. Windows Azure Mobile Service
- 7. Service Reference Windows 8
- 8. SqlWebEventProvider w/windows service
- 9. Приложение Windows Service app.config
- 10. Агент бассейн Windows Service
- 11. Windows Service Interactions
- 12. IIS vs Windows Service?
- 13. Windows Service Variable Lifetime
- 14. GUI to windows service
- 15. Приостановка Windows Service thread?
- 16. Windows Service Installer .NET
- 17. Windows Service OnPowerEvent
- 18. Windows Service Restart
- 19. WCF Windows Service TimeOut
- 20. Windows Service Install
- 21. Windows Service timing C#
- 22. windows application & service installer
- 23. windows service canStop свойство
- 24. Windows Service System.IO.DirectoryNotFoundException
- 25. schedular in windows service
- 26. GlassFish as windows service
- 27. C# Windows Service Console.Writeln
- 28. Установить Windows Service программно
- 29. Windows Service Installer C#
- 30. Windows Service Screen Shoot?
Я не могу помочь, но любопытно, что именно вы хотите сделать снова и снова, навсегда. – quillbreaker
Мы опросили клиентскую систему, чтобы импортировать задания, которые должны быть прямой ссылкой, они не будут толкать их, мы должны их получить, и нам нужно импортировать их в течение 10 секунд создаваемого файла там системы – MartGriff
Есть ли постоянное соединение к этому месту? Если это так, FileSystemWatcher можно использовать ... но только если соединение открыто, и вы можете получить доступ к диску через UNC. – Hooloovoo