2013-05-03 87 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 
     } 
    }