2013-03-19 54 views
1

請告訴我是否有更好的方法來做到這一點。獲取Windows服務與WPF應用程序交談?

我有一個WPF應用程序,但是有些時候我需要一些密集計算才能運行,所以我認爲最好是在自己的服務中發生這種情況,而不是產生一個線程從WPF運行它應用程序。

因此,這裏是我的問題:

  • 如何,當WPF應用程序打開時,我能得到它,因此Windows服務被打開呢?同樣,當應用程序關閉時,Windows服務會停止?不管它是否通過計算中途停止
  • 如何獲得Windows服務與WPF應用程序交談?我需要從Windows服務中獲取信息......比如它正在運行的計算名稱,它完成的百分比等等,這些相當基本的東西。但是能夠以某種方式從服務中獲取這些信息非常重要,所以我可以在WPF應用程序的GUI上顯示它。
  • 重要的一點:我還需要一種方法讓GUI與Windows服務交談。例如,我將在GUI中有一個區域,用戶可以選擇某些需要處理的計算。所以我需要將所選計算列表發送給服務,以便將其添加到計算隊列中以便運行。

我已經讀了一點關於WCF,雖然之前我沒有用過它,所以我不確定它是否對我所做的有用。

如果有人對此有任何想法,將不勝感激。這似乎是一件相當簡單的事情,但我找不到任何有關它的信息 - 儘管我可能會搜索錯誤的術語,或許我正在嘗試做的事情有一個公認的名稱?

感謝

+0

使用構造函數或窗口加載事件1.使用WCF進行通信。 – 0x4f3759df 2013-03-19 16:08:20

回答

1

我有一個WPF應用程序,但會有時候,我需要一些密集型計算來運行,所以我認爲這將是最好有這種事情發生在自己的服務,而不是產卵線程從WPF應用程序運行它。

一般來說,沒有必要這樣做。由於WPF應用程序已經在運行,因此產生線程將比嘗試啓動服務,使用IPC與其通信等等更快,更簡單並且更少的開銷。只需在應用程序中進行計算通常是正確的方式去做這件事。


話雖這麼說,我會盡力回答您的問題依次是:

如何,當WPF應用程序打開時,我能有這麼Windows服務被打開呢?同樣,當應用程序關閉時,Windows服務會停止?通過計算中途停止並不重要

如果你想這樣做,你最好不要使用服務。一個服務通常具有一個使用期限,當它啓動時,Windows啓動,並在系統關閉時關閉,並且不以用戶身份運行。如果您只是想啓動它,只需將其設置爲普通(控制檯)應用程序,然後使用Process.Start即可啓動它。這也可以讓你殺死該進程,如果有必要通過Process.Kill

如何獲得Windows服務與WPF應用程序交談?我需要從Windows服務中獲取信息......比如它正在運行的計算名稱,完成了多少百分比等等,這些相當基本的東西。但是能夠以某種方式從服務中獲取這些信息非常重要,所以我可以在WPF應用程序的GUI上顯示它。

這通常通過讓您的「服務」(或應用程序)成爲WCF主機來完成。然後,您的WPF應用程序可以充當「服務」的客戶端,並使用WCF傳遞消息。

重要的一點:我還需要一種方法讓GUI與Windows服務交談。例如,我將在GUI中有一個區域,用戶可以選擇某些需要處理的計算。所以我需要將所選計算列表發送給服務,以便將其添加到計算隊列中以便運行。

再次說明,啓動WCF主機的過程將完成此操作。這就是說,除非有很強的理由這樣做,否則在應用程序中使用線程並不需要擔心單獨的進程,這很簡單(也可能更好)。

+0

感謝您的詳細回覆,這聽起來像我應該使用線程。使用一個簡單的例子,如果我有一個類「MyCalcs」的屬性「列表計算」和一些方法... RunCalculationsInOrder()(大概是什麼我會在一個新的線程中運行),GetCurrentCalculation(),GetProgress ()...在新線程中處理這個問題的最好方法是什麼?這顯然比現實中的要複雜得多,但即使有了這個簡單的例子,我也無法弄清楚我可以如何傳遞信息(比如Calcs的更新列表)以及此線程。 – theqs1000 2013-03-19 16:25:24

+1

@ theqs1000 TPL使這很容易。看看http://reedcopsey.com/series/parallelism-in-net4/ – 2013-03-19 16:26:08

相關問題