执行第三方代码



我们有一个WPF (Windows窗体也适用)应用程序,有些功能我们依赖于其他团队。我正在寻找一个最好的方式来执行从其他团队的功能,而不损害我们的主要应用程序的稳定性。

其他团队的功能将包括一些gui,它可能会调用一些其他服务/数据库等。我们关心的是在UI线程上执行其他团队的功能,因为我们不确定他们的编码标准,比如他们在执行服务时是否遵循了有关后台线程的适当技术。我们有能力建议他们的API设计,我们的选择。我在考虑以下两种选择

  1. API将异步调用,但将接受dispatcher作为输入。

  2. 对调度员的传递不是很有信心
  3. 为服务/GUI方法提供API显式性,以便我们可以在后台线程上调用服务,并在完成时将模型传递给GUI。但是我们这边需要做更多的工作。

或者在执行其他团队代码的同时处理应用程序的稳定性时有更好的方法来处理。

选项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
       }
   }

相关内容

最新更新