【发布时间】:2014-04-29 15:32:40
【问题描述】:
我有一个 CPTproject 课程和一个 CPT 课程。 (CPT 是一项测试;这样做我得到了很多数据)。我想从 excel 文件中读取 CPT 数据。但由于它们是大文件,我正在创建 workingThreads 以一致地阅读它们。我想在我离开ObtainCPTs() 之前确保所有工作线程都已返回,这就是我对它们调用Join() 的原因。但有时仍会显示并非所有工作线程都返回(即“并非所有 CPTs 获得!”)消息。任何人都可以就可能出现的问题给出一些提示吗?
public static void ObtainCPTs(List<string> fileNames)
{
CPTproject.numCPTs = fileNames.Count;
List<Thread> workingThreads = new List<Thread>() ;
for (int i = 0; i < fileNames.Count(); i++)
{
HelperClass hp = new HelperClass(fileNames[i]);
workingThreads.Add(new Thread(hp.GetCPTdataFromExcel));
workingThreads[i].Start();
}
foreach (Thread t in workingThreads)
{
t.Join();
}
if (CPTproject.CPTs.Count() < CPTproject.numCPTs)
{
MessageBox.Show("Not all CPTs obtained!");
}
}
class HelperClass
{
private string _fileName;
public helperClass(string fileName)
{
this._fileName = fileName;
}
public void GetCPTdataFromExcel()
{
CPT cpt = new CPT();
//Reads from excel file with address this._fileName
CPTproject.CPTs.Add(cpt);
}
}
【问题讨论】:
-
你应该为此使用任务:)
标签: c# multithreading join