在创建线程中使用进度条失败?进度条没反映.
而在程序本身主线程为什么可以?

解决方案 »

  1.   

    控件只能在创建他的线程改变状态。否则使用Invoke或beginInvoke
      

  2.   

    http://hi.baidu.com/xdragon/blog/item/b845c650b745f0591138c253.html
      

  3.   

    private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i <= 100; i++)
                {
                    progressBar1.Value = i;
                }
                Thread th = new Thread(new ThreadStart(pro));   //子线程
                th.IsBackground = true;
                th.Start();
            }
            void pro()
            {
                for (int i = 0; i <= 100; i++)
                {
                    progressBar2.Invoke(new EventHandler(value), new object[] { i.ToString(), EventArgs.Empty });
                }        }
            void value(object sender, EventArgs e)
            {
                progressBar2.Value = int.Parse(sender.ToString());
            }
      

  4.   

    http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
    winform用BackgroudWoker异步显示进度条
      

  5.   

    3楼能否解释下
     progressBar2.Invoke(new EventHandler(value), new object[] { i.ToString(), EventArgs.Empty });
    progressBar2.Value = int.Parse(sender.ToString());是什么意思?
      

  6.   

    http://msdn.microsoft.com/zh-cn/vstudio/system.windows.forms.control.invoke.aspx
    去madn先看看
      

  7.   

    因为线程里不能跨线程调用窗体控件,我就用了控件的Invoke方法来实现给窗体控件赋值
    progressBar2.Value = int.Parse(sender.ToString())就是通过一个委托给这个控件赋值
      

  8.   

    在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。 命名空间:System.Windows.Forms
    程序集:System.Windows.Forms(在 system.windows.forms.dll 中) 
    C# 
    public Object Invoke (
    Delegate method,
    params Object[] args
    )
     参数
    method
    一个方法委托,它采用的参数的数量和类型与 args 参数中所包含的相同。 args
    作为指定方法的参数传递的对象数组。如果此方法没有参数,该参数可以是 空引用(在 Visual Basic 中为 Nothing)。 返回值
    Object,它包含正被调用的委托返回值;如果该委托没有返回值,则为 空引用(在 Visual Basic 中为 Nothing)