2011-12-20 82 views
9

我正在上使用了以下技術項目:如何在工作線程中調用UI線程上的方法?

  • C#(.NET 4.0)
  • WCF
  • PRISM 4

我目前正在異步調用到我們的Web服務之一,使用由代理生成的Begin/End方法。調用成功,客戶端能夠在工作線程上接收Web服務的響應。

收到回覆後,我繼續舉辦活動。訂閱了該事件的類進行到請求UI導航使用PRISM:

Application.Current.Dispatcher.BeginInvoke(new Action(() => 
    this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri))); 

由於異步WCF響應未在UI線程上捕獲的,我被迫使用調用Application.Current.Dispatcher.BeginInvoke(...) UI線程。

這裏的問題是調用似乎什麼都不做。用戶界面不會更新,也不會引發異常。

我應該如何從工作線程中引發的事件中調用UI線程?

編輯:這個問題已經被重新提出,在下面的鏈接,因爲所謂的重複不提供答案:

Request UI navigation using PRISM 4 on an asynchronous WCF response thread

+2

爲什麼這個線程關閉。可能的重複不處理WPF Windows,並且已經接近3歲,我得到這是一個常見主題(網站範圍),但可能重複爲無所謂。 – 2011-12-20 15:40:12

+0

我同意Ramhound ... – 2011-12-20 15:41:54

回答

5

你需要確保你是在實際的UI Dispatcher調用,不一定是Current。您可以嘗試傳入UI Dispatcher,或者使用某種形式的回調,該回調將由用戶界面在某處處理。

+0

我將如何去傳遞UI調度程序? – 2011-12-20 15:38:17

+1

假設你從某個UI元素(即UserControl)創建需要它的類,你可以這樣做:'var someClass = new SomeClass(this.Dispatcher);'。 – 2011-12-20 15:39:21

+0

@HusseinKhalil - 你不能發送主窗口的參考? – 2011-12-20 15:41:27

相關問題