如何从C#thread获取成员函数作为该线程参数的对象?

时间:2011-07-15 13:00:58

标签: c# .net multithreading

在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参考吗?

2 个答案:

答案 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)传递给线程函数。如果您需要多个,则可以随时传入Tupleobject[]或任何其他容器值。

如果你这样做,你可能想要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)