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

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

发布时间:2020-12-15 19:33:38 所属栏目:百科 来源:网络整理
导读:我有这个庞大的嵌套循环场景,它调用数据库并向Basecamp API发出HTTP请求.起初它是一个网络应用程序,但运行应用程序花了很多时间,因此用户(计费部门)经常会提前退出或抱怨,因为它需要很长时间没有反馈,也没有办法取消它.我想让它更具响应性并给它一个取消按钮
我有这个庞大的嵌套循环场景,它调用数据库并向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,"nnSYNC STOPPED BY USER.");
    break;
}

但是我永远不能单击“取消”按钮来切换该布尔值,因为窗口显示“无响应”…

解决方法

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

你可以阅读它here.

(编辑:李大同)

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

    推荐文章
      热点阅读