for循环有几十W,想在textbox中显示for循环倒计数,也就是第一个循环显示总循环-1,第二个循环显示总循环-2,………。
现在一运行窗口就是无响应状态,但实际在疯狂的在运行着,而textbox.text也不显示倒计数,后在这后加了thread.sleep(1000),也没有出来,又加了一个timer,也没有出来,问一下有什么好办法?
现在一运行窗口就是无响应状态,但实际在疯狂的在运行着,而textbox.text也不显示倒计数,后在这后加了thread.sleep(1000),也没有出来,又加了一个timer,也没有出来,问一下有什么好办法?
解决方案
2
你要是知道不显示的原因,估计明白什么方法合适了。
无响应是原因是主线程被阻塞了,
把耗时的操作放到线程中去,通过委托来与UI交互。
假如对线程不熟悉,可以使用backgroundworker控件
2
线程异步。试试看
10
循环体内 Application.DoEvent();
6
你们都忙,本人已经干不下去了,满脑子都是辞职辞职
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会比较蛋疼,反正窗体都关了,这么写最简单 } }