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