標籤:des c style class blog code
好不容易裝上了,又得把服務卸掉,好吧,我們開始編寫這個服務。
首先這是一個周報提醒工具,主要功能就是提醒,用何種方式呢? 彈窗唄。
這個工具肯定和時間有關的,因為它需要到點報時,周報一般是周末交嘛,就定成周五下午3點吧。
這樣思路就清晰了,我要做的就是一個每周五下午三點會彈窗的一個小程式。
恩...可是往哪裡添代碼呢...
於是開啟Service的代碼編輯器,發現有一個OnStart方法和一個OnStop方法,這是什麼呢?他們就是啟動服務和停止服務時要進行的操作。
下面我們要進行時間的判斷,我想告訴電腦,如果到了周五下午三點,你就給我彈個窗。
想法是很簡單,但是我如果寫一個:
If(時間是周五下午三點){彈窗;}
能實現嗎?根據我的實驗是不行的,好像只能用計時器來實現這個功能,讓它每隔一段時間檢測一下“到點了嗎”,然後再觸發事件,我也不知道有沒有什麼高超的辦法可以不需要通過計時器直接讓電腦到點自動觸發事件,總之這裡先講講我的辦法。
給服務添加一個Timer,把Interval屬性(觸發間隔時間)設成1000毫秒,也就是1秒
添加後開啟服務的Designer,把有“Windows.Form”的地方都改成“Timers”,我不太清楚為什麼,但是當我雙擊Timer控制項添加事件的時候,Form下的Timer事件是Tick,Timers下的Elapsed才是我要的,想深究的具體可以參考這篇文章:http://www.cnblogs.com/OpenCoder/archive/2010/02/23/1672043.html
好的,雙擊Timer添加事件Elapsed,它是時間間隔到了以後要執行的操作,然後我們還必須要在OnStart方法裡寫上:
protected override void OnStart(string[] args){ TimeMachine.Elapsed += new System.Timers.ElapsedEventHandler(TimeMachine_Elapsed);}
不用管這個啥意思,我也不懂,反正這個就是觸發事件的語句。
下面來實驗一下能否彈窗,在Elapsed事件裡寫個MessageBox,這樣服務啟動後每秒都會觸發Elapsed事件彈一個視窗。咦?MessageBox呢?怎麼沒這個東西?
查了之後才知道,原來服務是一個只有後台沒有使用者介面的程式,想要彈出訊息框,必須要引用System.Windows.Form程式集。之後還要在服務的屬性裡勾上“允許服務與案頭互動”:
唉,別看一個小小的服務程式,做起來還是挺麻煩的。好了,這下可以試試了。重建服務,安裝啟動,這個時候服務應該已經在系統裡跑起來了。恩? 怎麼沒反應?
一瞬間我就頭大了,走到這一步,已經是窮途末路,完全不知道該如何解決。我只好硬著頭皮在網上找解決方案。
終於皇天不負有心人,讓我找到一位大神(居然是微軟MVP,大神就是屌),原來這個是Session 0隔離的問題,這個就高端了,一共有兩篇文章,具體的可以查看:http://www.cnblogs.com/gnielee/archive/2010/04/07/1706229.html
我用了大神的解決辦法,建立了一個Interop類,把大神代碼粘進去,然後用裡面的方法調視窗,哈哈,成功了!
private void TimeMachine_Elapsed(object sender, System.Timers.ElapsedEventArgs e){ Interop.ShowMessageBox("今天,你交周報了嗎? 恩?", "友情提示");}
這樣就好了,基本的功能的實現方法都找到了,下一篇好好部署一下。