2011-08-19 68 views
3

我目前有此代碼(感謝您的幫助)。我需要創建第一個ProcessMessage作爲線程並同步(在當前線程上)運行第二個ProcessMessage,然後在單個線程上執行Join。否則,我將有三個線程有效地做兩件事。我如何修改它來完成它?我在.NET 3.5如何同步線程中的2個進程以使它們一起運行?

Thread thRegion1 = new Thread(() => 
{ 
    if (Region1.Trim().Length > 0) 
    { 
     returnMessage = ProcessTheMessage(string.Format(queueName, Region1)); 
     Logger.Log(returnMessage); 
    } 
}); 

Thread thRegion2 = new Thread(() => 
{ 
    if (Region2.Trim().Length > 0) 
    { 
     returnMessage = ProcessTheMessage(string.Format(queueName, Region2)); 
     Logger.Log(returnMessage); 
    } 
}); 

thRegion1.Start(); 
thRegion2.Start(); 

thRegion1.Join(); 
thRegion2.Join(); 
+0

運行此代碼的線程沒有完成任何工作。所以只能啓動一個線程。 –

回答

6

你可以這樣說:

Thread thRegion1 = new Thread(() => 
     { 
      if (shawRegion1.Trim().Length > 0) 
      { 
       returnMessage = ProcessMessage(string.Format(queueName, 
                  shawRegion1)); 
       Logger.Log(returnMessage); 
      } 
     }); 

thRegion1.Start(); 

if (shawRegion2.Trim().Length > 0) 
{ 
    returnMessage = ProcessMessage(string.Format(queueName, shawRegion2)); 
    Logger.Log(returnMessage); 
} 

thRegion1.Join(); 

這將啓動thRegion1線程,並執行在當前線程工作的另一部分。該工作完成後,thRegion1將調用Join,如果thRegion1已完成其工作,將立即返回。

+0

謝謝。但是ThRegion2在哪裏?我應該從第二道工序中的這條線中刪除它嗎?線程thRegion2 =新線程(()=>? – Ree

+0

@Ree是的,它被刪除,它正在做的工作被移動到*當前線程。*爲什麼它保持空閒時,它可以做有用的工作? – dlev

+0

' thRegion2'是不需要的,因此,它不再存在於我的代碼中,它所做的工作已經按照你的要求移動到當前線程中了 –

相關問題