在 Windows 服務中使用 Timer 的問題

2021-09-21 15:48:56 字數 1089 閱讀 5698

1. 新建乙個專案 

2. 從乙個可用的專案模板列表當中選擇windows服務 

3. 設計器會以設計模式開啟 

4. 從工具箱的元件表當中拖動乙個timer物件到這個設計表面上 (注意: 要確保是從元件列表而不是從windows窗體列表當中使用timer)

5. 設定timer屬性,enabled屬性為false,interval屬性30000毫秒 

6. 切換到**檢視頁(按f7或在檢視選單當中選擇**),然後為這個服務填加功能

這個說明正好適用於我要做的程式,於是照此一步步的操作。在從工具箱新增 timer1 控制項之後,雙擊它,vs自動生成 timer1_tick 方法,用於編寫定期觸發時要執行的**:

開啟services.msc,果然有我這個小東西在裡面,可啟動之後卻發現它沒有按照預定的**執行,沒有寫入任何日誌資訊,用程式監視也發現其沒有任何操作。

於是決定除錯一下,卻發現服務是不能直接在vs中除錯的,因為不能直接執行它,必須通過附加到程序的方法來除錯,稍微麻煩一點。但除錯的結果也令人失望,下的斷點乙個也沒有反應。

最後想到是不是 timer 並沒有啟動呢?試著把 timer 的 enable 屬性設定為 true,再重試還是不行。難道是這個 timer 壓根就不工作嗎?

之前了解過,在 .net 中可以使用三種 timer:

基於服務的timer   system.timers.timer 

基於執行緒的timer   system.threading.timer  

基於窗體的timer   system.windows.forms.timer

是不是我選擇了錯誤的那個 timer,所以不能工作呢?找到剛才按照教程從工具箱中拖過來的那個 timer1 控制項,發現這種方法生成的是 system.windows.forms.timer,但我的確是按照教程,從元件列表中選擇的,沒有錯啊,難道是教程錯了嗎?

於是果斷的刪除掉 timer1,再通過**手動定義乙個 system.timers.timer:

再次嘗試,終於看到**成功執行,生成了需要的日誌檔案。

看來,學習千萬不能依葫蘆畫瓢啊,特別是網上的知識,獲取很方便,但正確程度是不高的,切不可完全相信,需要增強自己的判斷能力,去粗取精

在windows中使用linux命令

注意本文講的不是使用wsl或者mingw之類的工具,而是使用更輕量級的busybox來實現在windows中使用一些linux的命令比如ls,wget等 新建文字文件,將下面的 複製進去並將檔案修改字尾為bat,然後執行 rem 因為要把busybox拷到system32,所以先獲取管理員許可權 c...

在windows的IDE中使用linux命令列

經常敲命令列,所以很不習慣windows的cmd和powershell。尤其是用過mac之後,發現完全回不來了。在碼 的時候,尤其是當需要乙個修改乙個環境變數,多麼希望能用export之類的命令。本篇文章的目的就是要幫你在ide的terminal裡面配置linux命令。最終效果展示 jetbrain...

在Flex中使用訊息服務

flex與伺服器的通訊元件除了httpservice,remoteobject,webservice外,還有producer consumer元件。producer和consumer使用messaging的方式通訊,與請求響應機制不同,這是一鐘發布訂閱機制。客戶端向伺服器訂閱訊息,當伺服器訊息發生變...