C# - 同时增加两个进度条(多线程)

时间:2015-06-09 07:06:06

标签: c# multithreading

我只想在按钮点击时同时增加两个进度条;我创建了两个进度条和一个按钮start,其中包含两个线程t1和t2,每个线程包含不同的方法,以便递增两个进度条的值(分别为progressbar1的t1和progressbar2的t2)。

我拥有的控件: 进度条:progressbar1,progressbar2 和按钮1。

代码如下:

    Thread t1, t2;
    private void Progressor1()
    {
        progressBar1.Minimum = 0;
        progressBar1.Maximum = 100;

        for (int i = 0; i <= 100; i++)            
            progressBar1.Value = i;
    }

    private void Progressor2()
    {            
        progressBar2.Minimum = 0;
        progressBar2.Maximum = 100;

        for (int j = 0; j <= 100; j++)            
            progressBar2.Value = j;            
    }

    private void button1_Click(object sender, EventArgs e)  // Start Button
    {
        t1.Start();
        t2.Start();
    }

    private void MultiThreadedcs_Load(object sender, EventArgs e)// Form Load
    {
        t1 = new Thread(Progressor1);
        t2 = new Thread(Progressor2);
    }

在运行时,它显示以下错误:

  

错误名称= InvalidOperationException   错误消息=跨线程操作无效:控制&#39; progressBar2&#39;从创建它的线程以外的线程访问。

请帮我解决这个问题。我对线程概念的想法较少,我已经完成了这个解决方案而没有在我的问题上取得进展:

c# threading access to other thread

1 个答案:

答案 0 :(得分:0)

在您编写的以新线程开始的方法中,您直接调用进度条,因此您尝试编辑另一个(原始)线程的数据。你不应该直接编辑进度条的值,而应Invoke这样做的方法,如下所示:

for (int j = 0; j <= 100; j++)
  this.progressBar1.Invoke((Action) () => this.progressBar1.Value = j, null);