直接上码private Thread _t;
        private void button2_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 1000;
            progressBar1.Minimum = 0;
            progressBar1.Value = progressBar1.Minimum;
            _t = new Thread(new ThreadStart(run));
            _t.Start();
            
            if (progressBar1.Value == progressBar1.Maximum)
            {
                _t.Abort();
            }
        }
        public void run()
        {
            if (progressBar1.Value > progressBar1.Maximum)
            { }
            else
            {
                progressBar1.Value++;//线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
                label1.Text = progressBar1.Value.ToString()+"%";
                Thread.Sleep(1000);
            }
        }应该怎么改呢??来个人指点下

解决方案 »

  1.   

    没必要显示 刻度, 一般都是假的
    可以异步 使用 弹出窗口 弄个gif 进度条
      

  2.   

    ??new Thread((ThreadStart)delegate{操作}).Start();这样可以吗?????
    还是报这个
    progressBar1.Value++;//线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
      

  3.   

            private Thread _t;
            private void button4_Click(object sender, EventArgs e)
            {
                progressBar1.Maximum = 100;
                progressBar1.Minimum = 0;
                progressBar1.Value = progressBar1.Minimum;
                _t = new Thread(new ThreadStart(run));
                _t.Start();            if (progressBar1.Value == progressBar1.Maximum)
                {
                    _t.Abort();
                }
            }        private delegate void PosterProBar();
            public void run()
            {
                while (true)
                {
                    PosterProBar ppb = new PosterProBar(ChangeBar);
                    this.Invoke(ppb);
                }
            }        private void ChangeBar()
            {
                if (progressBar1.Value == progressBar1.Maximum)
                {
                    try
                    {
                        _t.Abort();
                    }
                    catch { }
                }
                else
                {
                    progressBar1.Value++;//线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
                    label1.Text = progressBar1.Value.ToString() + "%";
                    Thread.Sleep(1);
                }
            }
      

  4.   

    你就在CSDN搜索一下,就能找到进度条
      

  5.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace TestProgressBar
    {
        public partial class TestForm : Form
        {
            //线程开始的时候调用的委托
            private delegate void maxValueDelegate(WordEventArgs e);
            //线程执行中调用的委托
            private delegate void nowValueDelegate(WordEventArgs e);
            //线程执行结束调用的委托
            private delegate void endValueDelegate(WordEventArgs e);        public TestForm()
            {
                InitializeComponent();
            }        private void btn_Test_Click(object sender, EventArgs e)
            {
                Worker worker = new Worker();            /// 订阅事件
                worker.OnStartWorkEvent += new WorkEventHandler(this.OnStartWorkEventHandler);
                worker.OnDoWorkEvent += new WorkEventHandler(this.OnDoWorkEventHandler);
                worker.OnEndWorkEvent += new WorkEventHandler(this.OnEndWorkEventHandler);            Thread thread = new Thread(new ThreadStart(worker.Work));
                thread.Start();  
            }        /// <summary>
            /// 线程开始事件,设置进度条最大值,需要一个委托来替我完成
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void OnStartWorkEventHandler(object sender, WordEventArgs e)
            {            
                maxValueDelegate max = new maxValueDelegate(SetMaxValue);
                this.Invoke(max, e);
            }        /// <summary>
            /// 线程执行中的事件,设置进度条当前进度,需要一个委托来替我完成
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void OnDoWorkEventHandler(object sender, WordEventArgs e)
            {           
                nowValueDelegate now = new nowValueDelegate(SetNowValue);
                this.Invoke(now, e);
            }        /// <summary>
            /// 线程完成事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void OnEndWorkEventHandler(object sender, WordEventArgs e)
            {
                endValueDelegate end = new endValueDelegate(SetEndValue);
                this.Invoke(end, e);
            }        /// <summary>
            /// 被委托调用,专门设置进度条最大值的
            /// </summary>
            /// <param name="maxValue"></param>
            private void SetMaxValue(WordEventArgs e)
            {
                this.probar_Test.Maximum = e.Position;
                lbl_Info.Text = e.Info;
            }        /// <summary>
            /// 被委托调用,专门设置进度条当前值的
            /// </summary>
            /// <param name="nowValue"></param>
            private void SetNowValue(WordEventArgs e)
            {
                this.probar_Test.Value = e.Position;
                lbl_Info.Text = e.Info;
            }        /// <summary>
            /// 被委托调用,专门设置进度条结束后的处理
            /// </summary>
            /// <param name="nowValue"></param>
            private void SetEndValue(WordEventArgs e)
            {
                this.probar_Test.Value = e.Position; ;
                lbl_Info.Text = e.Info;
                MessageBox.Show(e.Info);                   }    }
    }
    C# code
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;namespace TestProgressBar
    {
        public delegate void WorkEventHandler(object sender, WordEventArgs e);    class Worker
        {
            /// <summary>
            /// 开始事件
            /// </summary>
            public event WorkEventHandler OnStartWorkEvent;
            /// <summary>
            /// 执行时事件
            /// </summary>
            public event WorkEventHandler OnDoWorkEvent;
            /// <summary>
            /// 结束事件
            /// </summary>
            public event WorkEventHandler OnEndWorkEvent;
            public Worker() 
            {  }        private void SendEvents(WordEventArgs e)
            {
                switch (e.Stage)
                {
                    case WorkStage.BeginWork:
                        if (OnStartWorkEvent != null) OnStartWorkEvent(this, e);
                        break;
                    case WorkStage.DoWork:
                        if (OnDoWorkEvent != null) OnDoWorkEvent(this, e);
                        break;
                    case WorkStage.EndWork:
                        if (OnEndWorkEvent != null) OnEndWorkEvent(this, e);
                        break;
                    default:
                        if (OnDoWorkEvent != null) OnDoWorkEvent(this, e);
                        break;            }        }        public void Work()
            {
                int iTotal = 100;//计算工作量,这里是设置为100,如果是上传,或者下载,就是文件的大小,循环遍历的话,这就是最大的那个循环数
                SendEvents(new WordEventArgs(WorkStage.BeginWork, "开始工作!", iTotal));
                int iCount = 0;
                for (int i = 0; i < iTotal; i++)
                {
                    Thread.Sleep(50);//休息50毫秒,模拟执行大数据量操作,
                    iCount = i; // 此处计算所处的位置,如果是上传或者下载了多少了,
                    SendEvents(new WordEventArgs(WorkStage.DoWork, "正在工作ing " + iCount.ToString(), iCount));
                }            SendEvents(new WordEventArgs(WorkStage.EndWork, "结束工作!", iTotal));
            }    }    class WordEventArgs : EventArgs
        {
            //主要是用来往外传递信息的
            public WorkStage Stage;
            public string Info = "";
            public int Position = 0;      
            public WordEventArgs(WorkStage Stage, string Info, int Position)
            {
                this.Stage = Stage;
                this.Info = Info;
                this.Position = Position;
            }
        }    public enum WorkStage
        {
           BeginWork,  //准备工作
            DoWork,     //正在工作  
            EndWork,    //工作结束
        }
    }