我寫了下面的代碼。在那裏我創建了兩個線程ItmTh和RelTh。 ItmTh線程應該先執行,並且當ItmTh線程完成其執行時,應執行RelTh線程。可能的解決方案是什麼?多線程和線程同步
`
string[] filePaths = Directory.GetFiles(folderPath, "ARAS_IT*");
bool isTemplateFile = true;
int arasDefinitionFileCount = filePaths.Length;
TotalTemplateFile = arasDefinitionFileCount + Directory.GetFiles(folderPath, "ARAS_Rel*").Length;
//progressBar1.Value=0;
//int progess = 0;
if (arasDefinitionFileCount < 1)
{
isTemplateFile = false;
//MessageBox.Show("Root Folder does not contain Template File");
//return;
}
ManualResetEvent syncEvent = new ManualResetEvent(false);
Thread ItmTh = new Thread(()=>
{
//Iterate over Item Type files in Root Folder
for (int i = 0; i < arasDefinitionFileCount; i++)
{
//progess++;
//UpdateProgress(Convert.ToInt32(Convert.ToDouble((progess * 100)/progressBarValue)));
string fileName = filePaths[i];
//Find Name of Item Type From File Name
string ItemType = Path.GetFileNameWithoutExtension(fileName);
int start = ItemType.LastIndexOf('-');
int end = ItemType.Length;
start++;
end = end - start;
ItemType = ItemType.Substring(start, end);
//UpdateProgress(0);
if (ItemType.Equals("Document", StringComparison.InvariantCultureIgnoreCase))
{
Thread th = new Thread(() =>
{
processDocumentDataDefinitionFile(fileName, folderPath + "\\ARAS_IT-" + ItemType + "-files\\");
});
th.Start();
//th.Join();
}
else
{
Thread th = new Thread(() =>
{
processDataDefinitionFile(fileName, tbRootFolderPath.Text, ItemType, folderPath + "\\ARAS_IT-" + ItemType + "-files\\");
});
th.Start();
//Wait for Previous thread To complete its task
//th.Join();
}
}
});
ItmTh.Start();
/*******************************************************************************************************************/
//Process Relationship files
//ItmTh.Join();
Thread RelTh = new Thread(()=>
{
syncEvent.WaitOne();
filePaths = null;
filePaths = Directory.GetFiles(folderPath, "ARAS_Rel*");
arasDefinitionFileCount = filePaths.Length;
if (arasDefinitionFileCount < 1 && isTemplateFile == false)
{
MessageBox.Show("Root Folder does not contain Template File");
return;
}
//Iterate over Relationships files in Root Folder
for (int i = 0; i < arasDefinitionFileCount; i++)
{
string fileName = filePaths[i];
//Find Name of Item Type From File Name
string ItemType = Path.GetFileNameWithoutExtension(fileName);
int start = ItemType.LastIndexOf('-');
int end = ItemType.Length;
start++;
end = end - start;
ItemType = ItemType.Substring(start, end);
//Process File
Thread th = new Thread(() =>
{
Cursor.Current = Cursors.WaitCursor;
processDataDefinitionFile(fileName, tbRootFolderPath.Text, ItemType, folderPath + "\\ARAS_IT-" + ItemType + "-files\\");
});
th.Start();
//Wait for Previous thread To complete its task
// th.Join();
}
});
RelTh.Start();`
請看看[這](http://stackoverflow.com/questions/1584062/how-to-wait-for-thread-to-finish-with-net)。在那裏你有5種不同的選擇來說明如何去做你想做的事。 – Steven
謝謝我檢查它。 –
點擊「this」一詞。它是一個LinkLabel。但是,如果你願意,有一個完整的鏈接:http://stackoverflow.com/questions/1584062/how-to-wait-for-thread-to-finish-with-net。 – Steven