如何在C#WinForms应用程序中设计工作流?

如何在C#WinForms应用程序中设计工作流?,c#,winforms,background,workflow,worker,C#,Winforms,Background,Workflow,Worker,这可能是一个非常笼统的问题——但我对C#还很陌生。 你能不能给我解释一下,或者给我一个好的链接到一个例子或解释 我想设计一个C#Winform应用程序。 应用程序有一个主窗体,在需要时收集用户输入。 与用户界面一起开发了一个复杂的长时间运行的计算算法。 从主窗体上的按钮触发开始计算。(CaculateClass.Start()) 问题1: 在CaculateClass的方法调用堆栈深处的某个时间点,CaculateClass检测到需要用户进一步输入才能继续计算 在古C++控制台应用程序中,你会做

这可能是一个非常笼统的问题——但我对C#还很陌生。 你能不能给我解释一下,或者给我一个好的链接到一个例子或解释

我想设计一个C#Winform应用程序。 应用程序有一个主窗体,在需要时收集用户输入。 与用户界面一起开发了一个复杂的长时间运行的计算算法。 从主窗体上的按钮触发开始计算。(CaculateClass.Start())

问题1: 在CaculateClass的方法调用堆栈深处的某个时间点,CaculateClass检测到需要用户进一步输入才能继续计算

<>在古C++控制台应用程序中,你会做这样的事情: 回答

在C#和winforms中,如何将控制从调用堆栈的深处传递到UI,获取输入并返回到计算中断的位置? 或者CaculateClass的设计是否完全不同

问题2 为了避免UI冻结,许多文章建议将长时间运行的计算放在另一个线程中—例如,使用BackgroundWorker()

如果我让BackgroundWorker计算CaculateClass.Start()->收集用户输入如何工作

谢谢你的帮助,
CS

您应该看看后续任务:

任务是执行后台工作的新编程范例,它们比后台工作人员更受欢迎

在C#和winforms中,如何将控制从调用堆栈的深处传递到UI,获取输入并返回到计算中断的位置?或者CaculateClass的设计是否完全不同

它可能不是非常特定于语言,但您可能希望将事情解耦。从表单中获取输入,例如在委托类中对其进行操作。一旦委派的类准备好并有结果显示,您就可以更新UI

问题2为了避免UI冻结,许多文章建议将这种长时间运行的计算放在另一个线程中—例如,使用BackgroundWorker()

至于响应性,是的,一个后台线程可以在那里工作。收集输入并没有区别,您只需将输入传递给一个对象,该对象就会为您计算内容。在同一个线程或不同的线程上执行此操作是一个设计选择问题。将结果发布回主线程时会出现差异。由于不应该(不能)更改主线程以外的其他线程上的用户控件,因此需要
调用
将结果返回主线程。更多关于

关于一般性问题的一般性评论:)

尽量使UI内容尽可能精简。它负责将事物可视化,并获取用户输入。Google for(model-view-controller)-一种众所周知的GUI设计模式。或者看看(模型-视图-模型)-一种更现代的GUI设计模式。两者都有许多最佳实践和方法来保持设计的解耦