2011-05-11 31 views
0

我有一個WCF服務託管在Windows svc中。我以正常的方式從winforms應用程序執行它,製作頻道等,然後調用該方法。服務器端沒有.svc文件。在Windows svc中調用自託管的WCF服務而不阻塞UI

但是,當我從gui調用Windows服務中的方法時,這會阻止UI。有沒有阻止用戶界面的方式來做到這一點?

謝謝

+0

所以你有一個客戶端應用程序,有一個GUI,然後調用在UI中託管的WCF服務? – aceinthehole 2011-05-11 19:14:12

+0

WCF服務不在Windows服務中。對不起,我注意到我的帖子有點不清楚,現在我已經澄清了。 – dotnetdev 2011-05-11 19:15:25

+0

您是否從UI中的單獨線程調用WCF服務? – aceinthehole 2011-05-11 19:17:34

回答

0

看看BackgroundWorker類或更新的Task Parallel Library的東西。你想要的是打電話給服務,並描述接收到答案時該做什麼,但不要在等待答案的同時阻止UI。在某些情況下,UI在等待答案(例如搜索對話框的情況下)時可能沒有任何內容可用於。在答案回來之前,UI還沒有其他任何東西可以做。但是在後臺執行搜索意味着UI 線程已被釋放。這意味着您應該仍然可以移動和調整窗口大小,或者在等待時切換到同一應用程序中的另一個表單。這是在後臺執行調用的充分理由。

0

爲什麼不使用異步方法? 對於IDE爲您生成的每種方法,都有另一種帶Async後綴的方法。這樣你可以異步調用web服務。

+0

雖然這麼簡單嗎?我看着這個,但似乎我需要一個.svc文件? – dotnetdev 2011-05-11 20:08:01

+0

你現在打電話給你的服務?通過網絡進行處理?什麼約束? HTTP? netTcp?等等? – 2011-05-11 21:20:39

+0

現在它的命名管道(在同一臺機器上的兩個進程)。無論如何,我已經完成了異步方式,它迄今爲止工作,但需要一些修改。 – dotnetdev 2011-05-11 21:47:29