c#进度条控件,子线程修改控件数据。

c#进度条控件,子线程修改控件数据。

1.如果你开了一个只线程去修改主线程的控件那么一定会报错,网上的方法也试了十个有九个是不行的,我经过摸索委托发现了线程里面的这个方法,亲测很好用发出来做个总结。
首先界面是这样的
c#进度条控件,子线程修改控件数据。
测试代码这么写,注释很清晰

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LoPrintPersonnelSystemSynchronization
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }




        private void button1_Click(object sender, EventArgs e)
        {
            
            Thread thread = new Thread(() =>
             {
                 progressBar1.Value = 0;  //清空进度条
                 for (int i = 0; i <= 100; i++)
                 {
                     /*这里直接写会报错的,不能这么干
                     textBox3.Text = "";
                     progressBar1.Value += 1;
                     textBox3.AppendText(i.ToString() + "%");
                     Thread.Sleep(50);
					 this.progressBar1.InvokeRequired 这一步很关键就是说判断是不是子线程要修改数据
*/
                     if (this.progressBar1.InvokeRequired)
                     {/*data是Invoke接受到的数据,i是传递进去的数据,通过委托把i传给data就能在子线程修改了*/
                         this.progressBar1.Invoke(new Action<int>
                             (data => {
                                 this.textBox3.Text = data.ToString() + "%";
                                 this.progressBar1.Value = data;
                             }),i);
                         Thread.Sleep(30);
                     }
                 }
             });
            thread.IsBackground = true;
            thread.Start();


            }


        }

    }



完成我们来看运行时候的界面
完美运行,界面也可以拖动
c#进度条控件,子线程修改控件数据。
如果对你有帮助给我点个赞
谢谢您

上一篇:深入分析iSCSI协议的应用


下一篇:Javascript高级程序设计第二章 | ch2 | 阅读笔记