加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:43:44 所属栏目:百科 来源:网络整理
导读:这可能是一个非常普遍的问题 – 但我对C#很新. 你可以向我解释这个问题,或者给我一个例子或解释的良好链接. 我想设计一个C#Winform应用程序. 该应用程序有一个主窗体,可在需要时收集用户输入. 与UI一起开发了一种复杂的长期运行计算算法. 从主窗体上的按钮触
这可能是一个非常普遍的问题 – 但我对C#很新.
你可以向我解释这个问题,或者给我一个例子或解释的良好链接.

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

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

在古老的C控制台应用程序时代,人们会做这样的事情:
????cout<< “问问题”;
????cin>>回答;

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

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

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

谢谢你的帮助,
CS

解决方法

How is this done in C# with winforms,to pass control to the UI from somewhere deep in the call stack,get input and return to the place where the calculation was interupted? Or has the CaculateClass to be designed somehow completely different?

它可能不是特定于语言,但你想要解耦.从表单中获取输入,例如在委派的类中对其进行操作.在您的委托类准备就绪并显示结果后,您将更新UI.

Question 2 To avoid freezing of the UI a lot of articles recommend to put such long running calculations into another thread – e.g. by using BackgroundWorker()

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

A general remark on a general question

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读