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
以上是C# winform进度条的刷新问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>