C# 在单独的线程中使用Progressbar,以便在两个不同的任务中同时运行

C# 在单独的线程中使用Progressbar,以便在两个不同的任务中同时运行,c#,.net,desktop-application,C#,.net,Desktop Application,我想同时运行两个函数 第一个函数将计算我的计算机中的文件总数,并在一个DatagridView中显示结果 在第二个函数中,一个进度条的值将根据文件总数进行更改,这意味着在DatagridView中绑定所有文件时,进度条的值将设置为100 我想同步这两个函数的工作,我正在使用两个线程,但结果没有显示,出现了异常 我该怎么办 我的代码是 ThreadStart threadstatr = new ThreadStart(Function_1); ThreadStart threaProgress

我想同时运行两个函数

第一个函数将计算我的计算机中的文件总数,并在一个DatagridView中显示结果

在第二个函数中,一个进度条的值将根据文件总数进行更改,这意味着在DatagridView中绑定所有文件时,进度条的值将设置为100

我想同步这两个函数的工作,我正在使用两个线程,但结果没有显示,出现了异常

我该怎么办

我的代码是

 ThreadStart threadstatr = new ThreadStart(Function_1);
 ThreadStart threaProgress = new ThreadStart(Function_2);
 Thread thread = new Thread(threadstatr);
 Thread threadpro = new Thread(threaProgress);
 thread.Start();
 threadpro.Start();
 thread.Join();
 threadpro.Join();

void Function_2()
    {
        int coun = ((Convert.ToInt32(label1.Text)) / 100); //here label1 represents total no. of files
        for (int i = 0; i < coun; i++)
        {
            backgroundWorker1.ReportProgress(i);
        }
    }

例外情况是输入字符串的格式不正确。由于标签没有机会自我更新

嗯,它似乎比需要的要复杂一些。使用BackgroundWorker应该使您能够完全避免原始线程对象ThreadStart等

你有一个主应用程序/用户界面线程,在这里你的进度条被实例化。 您希望使用BackgroundWorker启动一个线程来完成工作-将您的工作搜索文件方法连接到BackgroundWorker.DoWork事件。 该方法可以使用BackgroundWorker.ReportProgress方法将进度报告回UI线程。 您的UI线程可以通过处理BackgroundWorker.ProgressChanged事件对进度增量进度控制作出反应。 创建BackgroundWorker时,不要忘记设置BackgroundWorker.WorkerReportsProgress=true


你可以通过查看BackgoundWorker的文档了解更多细节。

不要重复另一个答案和我的评论,但你似乎没有在听

放下线。代码中没有ThreadStart

不要从后台读取UI控件。 传递数据:

backgroundWorker1.RunWorkerAsync(numberToCompute);
使用BackgroundWorker

这正是你所需要的,如果你愿意遵循


你试过什么?显示一些代码?为什么进度条有一个单独的线程?如上所述,有什么例外?ThreadStart threadstatr=new ThreadStartFunction_1;ThreadStart threaProgress=新的ThreadStartFunction_2;螺纹=新螺纹STATR;Thread threadpro=新的ThreadthreaProgress;线程。开始;threadpro.Start;线程连接;threadpro.Join;输入字符串的格式不正确,所以显然label1.text不是数字。这些变量名让我想伤害自己。。。