在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 :(得分: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
)传递给线程函数。如果您需要多个,则可以随时传入Tuple
或object[]
或任何其他容器值。
如果你这样做,你可能想要ThreadFunction
static
(这也会让你失去使用this
的选项。)
答案 1 :(得分: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)