2010-08-05 159 views
1

我想獲得一個在C#中工作的線程來重置時間並運行另一個函數。我的代碼是:在C#中創建線程

Thread loopTime = new Thread(this.someFunction); 
loopTime.Start(); 

for (int i = 0; i < 20; i++) 
{ 
    ChangeTimeFunction(someTime); 
    Thread.Sleep(200); 
} 

我得到一個線程錯誤,如果我通過this.SomeFunction()。這不能根據Visual Studio使用。我可以將for循環作爲一個線程,但我不知道如何傳遞變量someTime

有沒有辦法將變量傳遞給循環,如果它是一個函數或從函數內調用for循環。

感謝您的任何幫助。

更新:

someFunction是使用Visual Studio錄製的方法。這不能在主線程之外使用。我需要在我創建的線程中放置for循環。有誰知道如何做到這一點?

感謝

+0

,您可以包括someFunction的definiton? – 2010-08-05 14:14:09

回答

4

有沒有辦法給 變量或者傳遞到循環,如果它是一個 函數或函數內 調用for循環。

.NET有兩個用於啓動線程的代表。第一個是ThreadStart,它只是調用一個沒有參數的方法。

第二個是ParameterizedThreadStart,它調用一個單一的object作爲參數的方法。

如果您在具有object參數的線程構造函數中傳遞方法,C#將隱式創建一個ParameterizedThreadStart委託。然後您使用線程的.Start(Object)方法向其發送object

例如,爲了使for循環線程,假設有時是一個DateTime和包括強制轉換到效果:

Thread loopTime = new Thread(someFunction); 
loopTime.Start(someTime); 

public void someFunction(object someTime) { 
    for (int i = 0; i < 20; i++) 
    { 
     // Note the cast here... I assumed it's a DateTime 
     ChangeTimeFunction((DateTime) someTime); 
     Thread.Sleep(200); 
    } 
} 
+0

@ R. Bemrose - ParameterizedThreadStart鏈接是完美的。感謝+1 – chrissygormley 2010-08-05 15:18:52

0

這聽起來不像是「這個」限定詞的問題。

您的someFunction是否接受參數?如果是的話,你可以:

  1. 讓它無參數,並通過數據直通成員字段
  2. 使用可以使用封蓋從外部範圍傳遞變量。

    int i = 2; 
    Thread t = new Thread(x => 
              { 
               i++;          
              }); 
    
    t.Start();