如何在循环中保持C#Windows窗体响应?

Met*_*uru 3 c# visual-studio

我有这个庞大的嵌套循环场景,它调用数据库并向Basecamp API发出HTTP请求.起初它是一个网络应用程序,但运行应用程序花了很多时间,因此用户(计费部门)经常会提前退出或抱怨,因为它需要很长时间没有反馈,也没有办法取消它.我想让它更具响应性并给它一个取消按钮以及一个实时日志,我也想让它更具可控性.我把它放在表单中,这样他们可以控制它的每个实例,并有一个取消按钮和一个实时日志.

然而,当我把它全部用表单按钮,多行文本框来替换响应和错误日志时,我无法得到任何工作!如果按下取消,我在循环中添加了检查以突破.但是,TextBox当我.Text.Insert然后.Update()时,我甚至无法单击取消并且多行不会实时更新.整个应用程序只是坐在那里旋转...我如何让它响应,在循环过程中接受按钮点击,并实时更新多线TextBox

注意:事情编译得很好,我可以逐步完成它,它写入一个日志文件就好了所以我可以告诉它在我的表单通过查看该日志文件冻结的事实.

这是我试图更新多行的代码TextBox:

TimeSyncLog.Text.Insert(TimeSyncLog.Text.Length, "(((" + clientCode + ")))\n");
Run Code Online (Sandbox Code Playgroud)

这是我的循环突破的代码:

if(CancelPressed)
{
    TimeSyncLog.Text.Insert(TimeSyncLog.Text.Length,"\n\nSYNC STOPPED BY USER.");
    break;
}
Run Code Online (Sandbox Code Playgroud)

但我永远不能点击取消按钮来切换,boolean因为窗口显示'无响应'...

Mos*_*evi 14

您不应该在UI线程上消耗业务逻辑.您可以将BackgroundWorker类用于这类事情.它还支持取消和进度报告.

你可以在这里阅读它.