解决c# progressBar更新出现界面假死

本文介绍了在C#中使用ProgressBar反映文件处理进度时遇到的界面假死问题,详细解析了Control.Invoke和Control.BeginInvoke方法的工作原理,并提出使用BackgroundWorker类来异步更新进度条,从而避免UI假死现象。同时,文章还提到了其他更新UI控件值的线程安全方法,如Invoke、BeginInvoke、Timer以及设置窗体属性等。
摘要由CSDN通过智能技术生成

最近一个项目需求中的一个功能是需要用progressBar反映处理文件的进度。

研究了Invoke和BeginInvoke方法。

Control.Invoke 方法 (Delegate) :拥有此控件的基础窗口句柄的线程上执行指定的委托。

Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。

我开始的想法是开一个线程处理,代码如下:

         private delegate void DoDataDelegate(object number);
        private void button2_Click(object sender, EventArgs e)
        {
           // Thread myThread = new Thread(DoData);
            Thread myThread = new Thread(new ParameterizedThreadStart(DoData));
            myThread.IsBackground = true;
            myThread.Start(int.Parse(textBox1.Text)); //线程开始  
            Console.WriteLine("主线程继续执行---------------");
        }
        private void DoData(object number)
        {
            if (progressBar1.InvokeRequired)
            {
                Console.WriteLine("开始");
                DoDataDelegate d = DoData;
                progressBar1.BeginInvoke(d, number);
                //代码段D
            }
            else
            {
                progressBar1.Maximum = (int)number;
                Console.WriteLine("准备进行循环调用");
                for (int i = 0; i < (int)number; i++)
                {
                  //这里是一段耗时长的代码
                  progressBar1.Value = i + 1;
                }
               
            }
        }                

 在上述代码中当执行到progressBar1.BeginInvoke(d, number);时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值