我已經建立一個Windows服務使用一個計時器,這是不是我想要做的理想。我有一個方法,我想打電話,一旦它結束,我希望它一次又一次地開始。這樣做的最好方法是什麼,你可以給我一個例子。Windows服務循環 - 如何?
2
A
回答
1
你能解釋一下你想完成什麼嗎?
在Service中使用計時器時,您需要使用System.Threading.Timer。
如果你經常循環,那麼你的CPU使用率將會通過屋頂。如果您嘗試監視某個目錄,則可以使用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
3
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();
+0
這會導致堆棧出現問題嗎?如果全天候運行 – MartGriff 2009-07-29 16:08:21
相關問題
- 1. 的Windows消息循環和服務器循環
- 2. 如何處理一個循環服務?
- 3. Ember同步循環服務
- 4. PHP web服務循環
- 5. Symfony2服務循環依賴?
- 6. SQL服務器循環表
- 7. 帶有循環和WCF的Windows服務線程
- 8. Windows服務在for循環內發送兩次請求
- 9. 創建運行無限循環的windows服務
- 10. 如何用C++執行Windows主循環中的任務
- 11. 如何啓動Windows服務
- 12. 如何測試Windows服務
- 13. 如何調試Windows服務
- 14. 如何啓動Windows服務
- 15. 如何安裝Windows服務
- 16. Windows批處理循環如何?
- 17. 如何退出Windows IoT重啓循環?
- 18. 如何循環Windows窗體對象incremently
- 19. WCF Ria服務和循環引用
- 20. SQL服務器 - 循環級聯通路
- 21. Extjs中的循環服務調用
- 22. 如何在啓動Windows服務時閱讀Windows服務配置?
- 23. 如何通過另一個Windows服務創建Windows服務
- 24. 如何使用C#.NET中的Windows服務調用Windows服務?
- 25. 避免循環引用服務和DI
- 26. 從Windows服務訪問環境變量
- 27. windows服務遞歸無限循環,延遲執行同步任務
- 28. Terraform服務之間的循環依賴
- 29. 長查詢服務器循環
- 30. PHP while循環不在服務器上
我不禁好奇什麼是你想要做一遍又一遍,直到永遠。 – quillbreaker 2009-07-29 15:42:12
我們調查客戶端系統以導入需要成爲活動鏈接的作業,他們不會推送它們,我們必須去獲取它們,並且我們需要在系統上創建的文件的10秒內導入它們 – MartGriff 2009-07-29 15:50:56
是否存在永久連接到這個位置?如果是這樣,一個FileSystemWatcher是可用的...但只有當連接打開,你可以通過UNC訪問驅動器。 – Hooloovoo 2009-07-29 15:53:57