2011-03-24 23 views
0

我正在研究一個應用程序,我認爲它會更適合作爲Windows服務。我在計劃轉換它時遇到的唯一問題是它有一個顯示活動的窗口。現在我知道這是不好的做法(在Win7中不推薦使用)來顯示服務中的GUI,所以我的問題是,顯示進度的最佳方式是什麼?從Windows服務實時進度

我的第一個想法是使用RPC和MIDL的輪詢方法,但是一個操作可能會在一兩秒內開始和結束,但使用輪詢會非常不準確。

對此我有什麼其他選擇?

感謝, Ĵ

編輯:我的問題是更多的通信方法,我打算把它分成業務和任務托盤圖標,但我想,以顯示與進度條的窗口顯示進度在服務中運行的任務,但輪詢會太慢,除非它是亞秒這似乎是一種浪費,有沒有辦法推動進度到任務托盤應用程序?

回答

3

創建一個服務來完成這項工作,還有一個可選 GUI應用程序,如果運行,它位於系統托盤中,並允許您打開一個窗口來觀察進度。您可以通過例如共享內存或命名管道 - 但請記住,服務在沒有人登錄時運行,所以它絕不應該依賴於能夠顯示進度。

推送機制:

  • 共享存儲器,互斥和一個事件(CreateEvent)。使用PulseEvent呼叫每當服務更新狀態,對事件的系統托盤的應用程序等待(如與MsgWaitForMultipleObjects)
  • 命名管道(CreateNamedPipe時) - 這些也可等待在系統托盤應用
  • TCP/UDP - 避免這種情況,你只會遇到不知道本地主機概念的過度的防火牆
+0

您的**單獨**監控程序也可以使用Windows服務控制管理器來顯示狀態,或者除了顯示進度和其他位外,還允許啓動/停止服務。使用工具提示可以很好地坐在系統托盤中。 – AJG85 2011-03-24 18:53:31

+0

感謝您的建議,我已經編輯了我的問題,以便更具體一些,因爲我更想弄清楚最佳通信方法,以顯示正在運行的任務的準確進度。謝謝,J – JWood 2011-03-24 19:25:58

+0

不要使用PulseEvent,它是不可靠的。 – 2011-03-24 19:37:53

1

在系統托盤中創建一個圖標。當您的服務正在做它的事情時,將圖標更改爲動畫,並更改圖標的工具提示(當用戶懸停鼠標時)以顯示氣球文本中的完成進度。

編輯:第二個想法,我可能不會動畫的圖標。只要給它一個不同的外觀。把它變成紅色,或者其他東西。

+0

+1這就是我們對我們的服務之一所做的一切,它是一種享受。 – 2011-03-24 19:00:49