2011-07-15 19 views
2

在C#線程通過使成員函數創建的:如何從C#線程獲取對象的哪個成員函數是該線程的參數?

class SomeClass { 
    public void ThreadFunction() {Thread.Sleep(Infinite); } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(myObject.ThreadFunction); 
thread.Start(); 

這裏ThreadFunction()不是靜態的,所以我想對象引用被傳遞給Thread構造。

ThreadFunction()裏面的代碼如何得到myObject?我只使用this參考嗎?

+0

是的,這是完全正常。即您可以使用ThreadFunction的任何字段,屬性或方法。 –

回答

4

像這樣:

class SomeClass { 
    public void ThreadFunction(Object obj) 
    { 
    SomeClass myObject = (SomeClass)obj; 
    Thread.Sleep(Infinite); 
    } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(new ParameterizedThreadStart(myObject.ThreadFunction)); 
thread.Start(myObject) 
+0

這似乎是矯枉過正。如果我們可以爲另一個對象調用ThreadFunction,那麼它很有用。但是這種情況對我來說似乎很奇怪。 –

4

在給出的確切示例中,只需訪問this即可。

在一般情況下,你也可以這樣做

class SomeClass { 
    public void ThreadFunction(object param) 
    { 
    var justAnExample = (string)param; 
    } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(myObject.ThreadFunction); 
thread.Start("parameter"); 

這使您可以通過任何類型的參數(在這裏,一個string)給線程函數。如果您需要不止一個,那麼您始終可以傳入一個Tupleobject[]或任何其他的值的容器。

如果你這樣做,你可能想製作ThreadFunctionstatic(這會讓你失去使用this的選項)。