-3

我想同时运行两个功能。

第一个函数将计算我计算机中的文件总数,并将结果显示在一个 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);
        }
    }

例外是“输入字符串的格式不正确。” 因为标签没有机会自我更新

4

2 回答 2

0

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

您有一个主应用程序/ UI 线程,您的进度条在其中被实例化。
您想使用 aBackgroundWorker来启动线程来完成工作 - 通过将您的工作(搜索文件)方法连接到BackgroundWorker.DoWork事件。
该方法可以使用方法将进度报告回 UI 线程BackgroundWorker.ReportProgressBackgroundWorker.ProgressChanged您的 UI 线程可以通过处理事件来响应进度(增量进度控制) 。在创建 BackgroundWorker 时
不要忘记设置。BackgroundWorker.WorkerReportsProgress = true

您可以通过查看 BackgoundWorker 的文档来获得更多详细信息。

于 2012-09-28T14:10:38.567 回答
0

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

放下线程。您的代码中没有 ThreadStart。

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

backgroundWorker1.RunWorkerAsync(numberToCompute);

使用后台工作者。

如果您愿意,这正是您所需要的。

BackgroundWorker 类

于 2012-09-28T23:28:25.583 回答