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

标签 c# multithreading

<分区>

我只是想让两个进度条在单击按钮时同时增加;我用两个线程 t1 和 t2 创建了两个进度条和一个按钮 start,每个线程都包含不同的方法来增加两个进度条的值(t1 分别代表 progressbar1 和 t2 代表 progressbar2)。

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

代码如下:

    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);
    }

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

Error Name = InvalidOperationException Error Message = Cross-thread operation not valid: Control 'progressBar2' accessed from a thread other than the thread it was created on.

请帮我解决这个问题。我对线程概念不太了解,我已经完成了这个解决方案,但我的问题没有任何进展:

c# threading access to other thread

最佳答案

在您编写的作为新线程启动的方法中,您直接调用进度条,因此您试图从另一个(原始)线程编辑数据。不要直接编辑进度条的值,您应该Invoke一个方法,如下所示:

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

关于C# - 同时增加两个进度条(多线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725141/

相关文章:

c# - Console.Writeline() 不工作

c# - 保存和解析枚举集合的最快方法?

c# - 如何计算/分析并行 C# 代码的百分比

android - 如何针对多核优化 Android 应用

C# 如何将不仅仅是 IAsyncResult 传递给 AsyncCallback?

c# - 如何使用 C# 程序中的新值快速更新表中的所有行

c# - 在线连接 .aspx 需要哪些配置?

C# - 从字典中获取资源时锁定

c++ - 线程池 C++

c# - 这个多线程Singleton是不是更高效?