2010-08-30 87 views
2

我一直沒能找到這樣的例子,但我確信那裏肯定有一些例子。如何在WP7中使用分派器進行異步調用?

當用戶點擊一個按鈕來登錄,點擊按鈕的事件處理程序調用登錄用戶基於用戶的功能,他們可以採取很多開始屏幕中的一個。屏幕從服務呼叫返回的信息。據我所知,Dispatcher.BeginInvoke僅用於更新UI線程,因此確定要導航到哪個頁面的邏輯應位於傳遞給Dispatcher.BeginInvoke的方法中,對嗎?

我需要撥打服務電話,並採取行動基礎上的結果。我是否必須首先進行異步服務調用並從回調中調用分派器?我是否將執行驗證的函數,調用服務並將回調作爲傳遞給Dispatcher的委託來處理?

對不起,如果這是一個基本問題。我找到的例子只使用Dispatcher來更新文本框或其他一些簡單的項目。我還沒有發現UI線程需要根據異步調用的結果採取行動。

回答

5

目前還不清楚你在說什麼驗證有關,但:

  • 調用服務異步,有一個回調,當服務呼叫完成
  • 在回調來執行,做任何非UI相關涉及工作,然後致電Dispatcher.BeginInvoke執行任何與UI相關的操作。

如果您需要做驗證前的服務調用,這可能是你的按鈕的事件處理程序的一部分......至少,只要它不是一個長期運行的片驗證。

如果你能給什麼步驟,邏輯上涉及您的過程的詳細信息,這將有助於。

+0

我在發送服務調用之前驗證一些基本知識,例如用戶名不是空的或者具有無效字符。您可以忽略該部分。 – CACuzcatlan 2010-08-30 20:31:13

3

請參閱Dispatcher實際上擁有UI線程。由於每個控件都具有強大的線程親和力,因此您需要使用分派器來更新它。

從您可以使用調度訪問DispatcherObject.Dispatcher任何線程。

this.Dispatcher.Invoke((Action)(()=>{ 
.//// your action 
}); 

現在無論何時您需要更新線程中的元素,您都可以環繞上下文以隨時調用服務。您可以使用後臺線程,或者您可以從Dispatcher線程內部調用以調用Service調用。

調用從調度員將舉行UI如果調用是同步的。所以我建議你在更新Invoker下執行後臺線程的調用。

+2

請注意,WP7沒有Invoke - 只有BeginInvoke。 – 2010-08-30 20:37:21

+0

哦......我的壞。 :( – abhishek 2010-08-31 09:24:03

3

所有服務呼叫是在Silverlight(因此Windows Phone 7的)異步的是,你的描述是你做的方式。

不同的服務庫提供了不同的方式來調用他們的方法 - 有些提供了「調用完成」的方法,其他的則需要傳入一個事件處理程序,但是無論哪種方式,如果你想更新UI(我認爲這包括移動頁面)你將需要在UI線程上執行此操作,這是調度程序的用途。

Dispatcher.BeginInvoke(() => { 
    // This code is on the UI thread. 
});