我有一个巨大的嵌套循环场景,它正在调用数据库并向 Basecamp API 发出 HTTP 请求。起初它是一个网络应用程序,但运行该应用程序需要花费很多时间,因此用户(计费部门)经常会提前退出或提示,因为它会花费很长时间而没有反馈并且无法取消它。我想让它更具响应性,并给它一个取消按钮和实时日志,我还想让它更易于控制。我把它放在表格中,这样他们就可以控制它的每个实例,并有一个取消按钮和一个实时日志。
然而,当我用表单按钮、多行文本框来代替响应和错误日志时,我什么都做不了!如果取消被按下,我在循环中添加了检查以中断。但是,我什至无法单击取消,当我 .Text.Insert 然后 .Update() 时,多行 TextBox
将不会实时更新。整个应用程序只是坐在那里旋转......我如何让它响应,在循环期间接受按钮点击,并实时更新多行 TextBox
?
注意:这个东西编译得很好,我可以单步执行它,它会很好地写入日志文件,所以我可以在我的表单卡住后通过查看该日志文件判断它正在工作。
这是我尝试更新多行 TextBox
的代码:
TimeSyncLog.Text.Insert(TimeSyncLog.Text.Length, "(((" + clientCode + ")))\n");
这是我的循环突破的代码:
if(CancelPressed)
{
TimeSyncLog.Text.Insert(TimeSyncLog.Text.Length,"\n\nSYNC STOPPED BY USER.");
break;
}
但我永远无法单击“取消”按钮来切换该 bool 值
,因为窗口显示“无响应”...
最佳答案
您不应在 UI 线程上执行任何耗时的业务逻辑。 您可以将 BackgroundWorker 类用于这些事情。它还支持取消和进度报告。
你可以阅读它here .
关于c# - 如何让我的 C# Windows 窗体在搅动循环时保持响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693612/