2012-03-06 56 views
2

为了表示在线程上执行的方法,我使用 ParameterizedThreadStart并传递方法的名称。在这种情况下该方法的名字是SelectJob和实例化如下:使用委托给线程传递方法签名

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob); 

protected void SelectJob(object index) 
{ 
    ... 
} 

为了重新使用我想,如果可能的话,该方法的名称存储在变量中,但代码的一部分的智能感知显示ParameterizedThreadStart的方法签名为ParameterizedThreadStart(void (object) target),我不知道如何存储这种价值。从MSDN我意识到这是一个代表所以读How to: Declare, Instantiate, and Use a Delegate后,我想申报...

delegate void Del(string str); 
Del selectDelegate = SelectJob; 

...但由于SelectJob方法也不是一成不变的,我没有能够做到这一点。简单地将该方法设为静态并不是一个简单的选择。

有没有其他的方式来做出这个声明?

谢谢!

回答

3

在构造函数中初始化委托实例?

public class MyClass 
{ 
    private ParameterizedThreadStart starter; 

    public MyClass() 
    { 
     starter = SelectJob; 

     Del selectDelegate = SelectJob; 
    } 

    delegate void Del(string str); 

    protected void SelectJob(object index) 
    { 

    } 
} 
+0

谢谢。我很少关注代表的使用,虽然在概念上并不困难,但我经常很难正确实例化它们。感谢您的帮助! – McArthey 2012-03-08 15:52:38

+0

不客气。 – 2012-03-08 15:54:29

0

您可以只需将其分配到一个操作字段在构造函数:

class Boo 
    { 
     public Boo() 
     { 
      _myDelegate = SelectJob; 

     } 

     Action<object> _myDelegate ; 
     protected void SelectJob(object index) 
     { 

     } 
    } 

另外,有一个总是返回你的委托方法:

class Hoo 
    { 


     protected Action<object> SelectJobDelegate(object index) 
     { 
      return o => 
         { 

          // do something with o 
         }; 
     } 
    }