2010-02-18 86 views
3

我必須實現客戶端爲Windows應用程序的基於客戶端服務器的應用程序。現在,我的計劃是創建一個Web服務作爲服務器應用程序,並在我們的客戶端應用程序中使用它。但問題在於通知。爲此,我需要在客戶端應用程序中添加一個計時器來檢查通知。它減慢了客戶端應用程序的速度。如何使用.NET實現Windows應用程序的通知

這樣做的最佳方法是什麼?

我需要爲這兩個應用程序創建設置。所以,解決方案必須是可部署的。

編輯:我不能把計時器放在後臺或單獨的線程,因爲我必須立即更新datagridview。

+0

您能否顯示此計時器的代碼,以便我們可以看看是否有可能導致此減速的錯誤? – 2010-02-18 07:26:32

+0

您需要多長時間輪詢您的服務器以進行更改?如果每分鐘不超過幾次,您目前的方法應該可以正常工作。仔細闡述「它會減慢客戶端應用程序」聲明? – 2010-02-18 07:28:18

+0

BackgroundWorker可以像UI線程一樣快地更新UI。 – 2010-02-23 22:44:46

回答

0

如果您使用WCF,那麼你可能需要考慮Duplex services

雙工服務合同,是指兩個端點 可以獨立發送消息到 其他消息 交換模式。因此,雙工服務 可以將消息發送回到客戶端端點,從而提供類似於事件的行爲 。當客戶端 連接到服務並向 服務提供服務時,通信發生雙工 通信,服務可以通過該服務將消息發送回 客戶端。請注意,類似事件的 雙工服務的行爲僅在會話中使用 。

所以這避免了計時問題..

一些鏈接值得考慮

0

通過「創建一個web服務作爲服務器應用程序,並在我們的客戶端應用程序使用它」我想你的意思是你通過一個代理訪問Web服務,並在您的客戶端應用程序沒有實際承載Web服務。

你在後臺線程上運行你的計時器嗎?我得到的印象是,你使用計時器來輪詢Web服務,並且它正在捆綁你的UI,導致放慢速度(當然,還有其他因素需要考慮,但這是我當時最可能考慮的因素)。

+0

已更新的問題。 – Brij 2010-02-18 12:58:42

0

你如何做「檢查通知」?這可能是一個愚蠢的建議,但開始一個新的線程來做到這一點可能會減輕對客戶端應用程序的衝擊?

1

使用一個BackgroundWorker或Threadpool.QueueUserWorkItem您的來電到web服務,然後更新你的GUI。您的應用程序變慢,因爲您呼叫從主UI線程的web服務,直到該Web服務調用完成後您的應用程序無法處理其他事件,包括重畫,縮放,點擊...

見本文件:http://msdn.microsoft.com/en-us/library/ms951089.aspx

你想通過調用遠程資源立即更新? 恐怕這是不可能的,除非我們傾倒熱力學法則之一,並允許時間旅行。

但是你可以作弊並且預取你的數據並且每隔XXX秒將它綁定在幕後。

在更新網格時請記住使用BeginUpdateEndUpdate,以免發生閃爍。

0

即使您需要使用結果更新UI,對另一個線程執行檢查的建議也是正確的。只要確保在表單上使用InvokeRequired屬性和BeginInvoke方法。 BeginInvoke會將調用分派給UI線程。請參閱What's up with BeginInvoke?以獲取有關示例代碼的更完整解釋。另外,正如Florian Doyon所說,不要忘記在DataGridView上使用BeginUpdate和EndUpdate。

相關問題