使用委托将方法签名传递给线程

时间:2012-03-06 14:41:23

标签: c# multithreading delegates

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

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob);

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

为了重用一部分代码,我希望,如果可能的话,将方法名称存储在变量中,但IntelliSense会将ParameterizedThreadStart的方法签名显示为ParameterizedThreadStart(void (object) target)而我不是确定我如何存储这种价值。从MSDN开始,我意识到这是一个代表,所以在阅读How to: Declare, Instantiate, and Use a Delegate之后,我试图宣布......

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

...但由于SelectJob方法不是静态的,我无法做到这一点。简单地使方法静态不是一个简单的选择。

是否有其他方式进行此声明?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

public class MyClass
{
    private ParameterizedThreadStart starter;

    public MyClass()
    {
        starter = SelectJob;

        Del selectDelegate = SelectJob;
    }

    delegate void Del(string str);

    protected void SelectJob(object index)
    {

    }
}

答案 1 :(得分:0)

您只需将其分配给构造函数中的Action字段:

   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
                       };
        }
    }