Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从业务层更新UI?_C#_Multithreading_User Interface_Business Logic - Fatal编程技术网

C# 如何从业务层更新UI?

C# 如何从业务层更新UI?,c#,multithreading,user-interface,business-logic,C#,Multithreading,User Interface,Business Logic,我在C#中有一个三层应用程序。在业务层,我有许多线程做同样的工作。 我想在UI上显示每个线程的进度,但我没有表示层的参考 我该怎么做?最好的方法是什么 谢谢。最简单的方法是UI向业务层传递一个要调用的委托(或接口),以便指示进度 这也很容易测试,因为它分离了关注点:在业务层测试中,您可以传递测试委托并确保调用它。在您的UI测试中,您可以伪造业务层,并假装有进展,调用适当的代理并检查UI是否适当更新。这里最合适的答案可能是在您的业务层的某个地方公开一个事件。您的UI代码可以订阅事件,并通过切换到U

我在C#中有一个三层应用程序。在业务层,我有许多线程做同样的工作。 我想在UI上显示每个线程的进度,但我没有表示层的参考

我该怎么做?最好的方法是什么


谢谢。

最简单的方法是UI向业务层传递一个要调用的委托(或接口),以便指示进度


这也很容易测试,因为它分离了关注点:在业务层测试中,您可以传递测试委托并确保调用它。在您的UI测试中,您可以伪造业务层,并假装有进展,调用适当的代理并检查UI是否适当更新。

这里最合适的答案可能是在您的业务层的某个地方公开一个
事件。您的UI代码可以订阅事件,并通过切换到UI线程(如果需要)并更新自身来处理事件

然后,业务代码不需要了解UI,也可以在没有任何UI的情况下工作(但与所有委托/回调一样,在尝试调用委托之前,需要检查
null