2013-05-03 88 views
0

我們有一個WPF(Windows Forms也適用)應用程序,對於我們依賴於其他團隊的某些功能。我正在尋找一種最佳方式來執行其他團隊的功能,而不會影響我們主應用的穩定性。執行第三方代碼

其他團隊的功能將包括一些圖形用戶界面,並可能會調用一些其他服務/數據庫等。我們擔心的是在UI線程上執行其他團隊的功能,因爲我們不確定他們的編碼標準在執行服務時遵循後臺線程的正確技術。我們有能力根據我們的選擇向他們推薦API設計。我想到的是以下兩個選項

  1. API會異步調用的,但需要調度員作爲輸入。對於通過調度程序不是很有信心

  2. 將API explicity提供給服務/ GUI方法,因此我們可以在後臺線程上調用服務並在完成時將模型傳遞給GUI。但是這需要我們做更多的工作。

或者在執行其他團隊代碼時處理穩定的應用程序時,有更好的方法來處理。

回答

2

方案3:

通過他們所謂的「UIThreadInvoker」或類似的Action<Action>是那麼可以在靜態參考的地方存儲和使用,每一個他們需要的東西在UI線程中完成的時間:

在你身邊:

//App_Startup or somewhere during initialization 
TheirApi.UIThreadInvoker = x => Dispatcher.BeginInvoke(x); 

他們身邊:

public class TheirAPI 
    { 
     public static Action<Action> UIThreadInvoker {get;set;} 

     public void SomeMethod() 
     { 
      //Pass SomeOtherMethod() to the UIThreadInvoker 
      UIThreadInvoker(SomeOtherMethod); 
     } 

     public void SomeOtherMethod() 
     { 
      //this will be executed by your dispatcher 
     } 
    }