2010-10-29 76 views
0

我知道如何在日常的.NET中做到這一點,但是隨着WP7開發和Silverlight的發展,讓我發瘋。一個HttpWebRequest響應必須做異步,冷靜,但我怎麼能從異步方法調用UI線程?在Silverlight中從BeginGetResponse調用UI線程

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create('http://stackoverflow.com'); 
request.BeginGetResponse(new AsyncCallback(onRequestComplete), request); 

我在一個類,它有一個委託成立調用此。我想從onRequestComplete在UI線程上調用委託。我知道我可以這樣做,從委託人那裏調用,但我覺得這會更清潔。

在此先感謝

回答

1

您需要訪問到相關Dispatcher,然後調用Dispatcher.BeginInvoke

任何UI元素都將通過Dispatcher屬性訪問系統調度程序。如果您需要以可測試的方式執行此操作,您可能需要將調度程序抽象爲帶有實現的IDispatcher接口,以便使用正常的接口進行生產,並在測試中使用類似SameThreadDispatcher的接口。

+0

謝謝。所以下一個問題 - InvokeRequired去哪了?谷歌說要使用CheckAccess,但我看不到。 – Sam 2010-10-29 08:32:49

+0

@Sam:CheckAccess *應該在那裏。它被記錄。根據我的經驗,您一般都知道您是否需要通過調度員來調用 - 而且如果您不確定,那麼無論如何這樣做幾乎總是安全的。 – 2010-10-29 08:40:49

+0

謝謝。是的,出於某種原因,它不會出現在VS2010中的IntelliSense中,但是,是的,我在最後一次評論之後嘗試了它,並且它工作正常。謝謝。 – Sam 2010-10-29 08:53:52