我们有一个WPF(Windows Forms也适用)应用程序,对于某些功能,我们依赖于其他团队。我正在寻找一种最好的方法来执行其他团队的功能,而不会影响我们的主应用程序的稳定性。
其他团队的功能将包括一些GUI,可能会调用其他一些服务/数据库等。我们担心的是在UI线程上执行其他团队功能,因为我们不确定他们的编码标准,如他们正在关注关于执行服务时后台线程的正确技巧。我们有能力根据我们的选择建议API设计。我正在考虑以下两个选项
API将进行异步调用,但会将调度程序作为输入。
在服务/ GUI方法中提供API明确性,以便我们可以在后台线程上调用服务,并在完成时将模型传递给GUI。但这将涉及到我们方面的更多工作。
或者在执行其他团队代码时处理我们的应用程序的稳定性时有更好的方法来处理。
答案 0 :(得分: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
}
}