如何在C#WinForms应用程序中设计工作流?
这可能是一个非常笼统的问题——但我对C#还很陌生。 你能不能给我解释一下,或者给我一个好的链接到一个例子或解释 我想设计一个C#Winform应用程序。 应用程序有一个主窗体,在需要时收集用户输入。 与用户界面一起开发了一个复杂的长时间运行的计算算法。 从主窗体上的按钮触发开始计算。(CaculateClass.Start()) 问题1: 在CaculateClass的方法调用堆栈深处的某个时间点,CaculateClass检测到需要用户进一步输入才能继续计算 <>在古C++控制台应用程序中,你会做这样的事情: 回答 在C#和winforms中,如何将控制从调用堆栈的深处传递到UI,获取输入并返回到计算中断的位置? 或者CaculateClass的设计是否完全不同 问题2 为了避免UI冻结,许多文章建议将长时间运行的计算放在另一个线程中—例如,使用BackgroundWorker() 如果我让BackgroundWorker计算CaculateClass.Start()->收集用户输入如何工作 谢谢你的帮助,如何在C#WinForms应用程序中设计工作流?,c#,winforms,background,workflow,worker,C#,Winforms,Background,Workflow,Worker,这可能是一个非常笼统的问题——但我对C#还很陌生。 你能不能给我解释一下,或者给我一个好的链接到一个例子或解释 我想设计一个C#Winform应用程序。 应用程序有一个主窗体,在需要时收集用户输入。 与用户界面一起开发了一个复杂的长时间运行的计算算法。 从主窗体上的按钮触发开始计算。(CaculateClass.Start()) 问题1: 在CaculateClass的方法调用堆栈深处的某个时间点,CaculateClass检测到需要用户进一步输入才能继续计算 在古C++控制台应用程序中,你会做
CS您应该看看后续任务: 任务是执行后台工作的新编程范例,它们比后台工作人员更受欢迎 在C#和winforms中,如何将控制从调用堆栈的深处传递到UI,获取输入并返回到计算中断的位置?或者CaculateClass的设计是否完全不同 它可能不是非常特定于语言,但您可能希望将事情解耦。从表单中获取输入,例如在委托类中对其进行操作。一旦委派的类准备好并有结果显示,您就可以更新UI 问题2为了避免UI冻结,许多文章建议将这种长时间运行的计算放在另一个线程中—例如,使用BackgroundWorker() 至于响应性,是的,一个后台线程可以在那里工作。收集输入并没有区别,您只需将输入传递给一个对象,该对象就会为您计算内容。在同一个线程或不同的线程上执行此操作是一个设计选择问题。将结果发布回主线程时会出现差异。由于不应该(不能)更改主线程以外的其他线程上的用户控件,因此需要
调用将结果返回主线程。更多关于
关于一般性问题的一般性评论:)
尽量使UI内容尽可能精简。它负责将事物可视化,并获取用户输入。Google for(model-view-controller)-一种众所周知的GUI设计模式。或者看看(模型-视图-模型)-一种更现代的GUI设计模式。两者都有许多最佳实践和方法来保持设计的解耦