C# winform进度条的刷新问题
不知道为什么没有刷新 要等函数执行完毕之后才刷新 感觉很奇怪
刚试了下 用两条MessageBox.show()可以显示 也就是说并非函数执行完毕之后才能执行 类似于阻塞 想问下怎么解决界面刷新的问题
回答
#region 旧版解决方案
private void Button1_Click(object sender, EventArgs e) {
((Action)ProgressBar1).BeginInvoke((org) => { //进度条逻辑要用一个异步线程,如果直接在UI线程中循环操作,UI会出现假死,并且只显示最后一个值
MessageBox.Show("进度条执行完毕"); //由于是异步的,这里不会阻塞
}, null);
}
void ProgressBar1() {
int i = 0;
do {
i++;
//在异步线程中,不能直接操作控件,需要到控件所在的线程上通过异步委托进行操作
label1.Invoke((Action)(() => {
label1.Text = i + "%";
}));
Thread.Sleep(50);
} while (i < 100);
}
#endregion
#region 新版async await,简单
private async void Button2_Click(object sender, EventArgs e) {
await ProgressBar2();
MessageBox.Show("进度条执行完毕后才会弹出");
}
async Task ProgressBar2() {
int i = 0;
do {
i++;
label1.Text = i + "%";
await Task.Delay(50);
} while (i < 100);
}
#endregion