for循环很大,想在textbox中显示计数

.Net技术 码拜 8年前 (2016-05-10) 908次浏览
for循环有几十W,想在textbox中显示for循环倒计数,也就是第一个循环显示总循环-1,第二个循环显示总循环-2,………。
现在一运行窗口就是无响应状态,但实际在疯狂的在运行着,而textbox.text也不显示倒计数,后在这后加了thread.sleep(1000),也没有出来,又加了一个timer,也没有出来,问一下有什么好办法?
解决方案

2

引用:

for循环有几十W,想在textbox中显示for循环倒计数,也就是第一个循环显示总循环-1,第二个循环显示总循环-2,………。
现在一运行窗口就是无响应状态,但实际在疯狂的在运行着,而textbox.text也不显示倒计数,后在这后加了thread.sleep(1000),也没有出来,又加了一个timer,也没有出来,问一下有什么好办法?

你要是知道不显示的原因,估计明白什么方法合适了。
无响应是原因是主线程被阻塞了,
把耗时的操作放到线程中去,通过委托来与UI交互。
假如对线程不熟悉,可以使用backgroundworker控件

2

线程异步。试试看

10

循环体内 Application.DoEvent();

6

你们都忙,本人已经干不下去了,满脑子都是辞职辞职for循环很大,想在textbox中显示计数

        private void button1_Click(object sender, EventArgs e)
        {
            Thread UIThread = new Thread(this.UpdateUI);
            UIThread.IsBackground = true;
            UIThread.Start();
        }
        public int Index { get; set; }
        private void UpdateUI()
        {
            Binding binding = new Binding("Text", this, "Index");
            binding.ControlUpdateMode = ControlUpdateMode.OnPropertyChanged;
            this.Invoke((Action)delegate
            {
                this.label1.DataBindings.Add(binding);
            });
            for (int i = 0; i < 1000000; i++)
            {
                this.Index = i;
                try
                {
                    this.Invoke((Action)binding.ReadValue);
                }
                catch { }//线程结束前,假如关闭窗体,则Invoke会比较蛋疼,反正窗体都关了,这么写最简单
            }
        }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明for循环很大,想在textbox中显示计数
喜欢 (0)
[1034331897@qq.com]
分享 (0)