我想同时运行两个函数。
第一个函数将计算我的计算机中的文件总数,并将在一个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);
}
}
并且异常是“输入字符串格式不正确”。因为标签没有机会更新自己
答案 0 :(得分:0)
嗯它似乎比它需要的要复杂一些。使用BackgroundWorker应该可以完全避免原始Thread对象(ThreadStart等)。
您有一个主应用程序/ UI线程,您的进度条会被实例化
您希望使用BackgroundWorker
来启动线程来完成工作 - 将您的工作(搜索文件)方法连接到BackgroundWorker.DoWork
事件。
该方法可以使用BackgroundWorker.ReportProgress
方法将进度报告回UI线程。
您的UI线程可以通过处理BackgroundWorker.ProgressChanged
事件来响应进度(增量进度控制)
在创建BackgroundWorker时不要忘记设置BackgroundWorker.WorkerReportsProgress = true
。
通过查看BackgoundWorker的文档,您可以获得更多详细信息。
答案 1 :(得分:0)
不要重复另一个答案和我的评论,但你似乎没有听。
删除线程。代码中没有ThreadStart。
不要从后台读取UI控件 传递数据:
backgroundWorker1.RunWorkerAsync(numberToCompute);
使用BackgroundWorker。
如果您愿意,这正是您所需要的。