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

本文关键字:线程 方法 | 更新日期: 2023-09-27 18:27:06

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

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob);
protected void SelectJob(object index)
{
     ...
}

为了重用代码的一部分,如果可能的话,我希望将方法名称存储在变量中,但IntelliSense将ParameterizedThreadStart的方法签名显示为ParameterizedThreadStart(void (object) target),我不确定如何存储这种值。从MSDN我意识到这是一个委托,所以在阅读了我试图声明的如何:声明、实例化和使用委托之后。。。

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

但是由于CCD_ 5方法不是静态的,所以我不能做到这一点。简单地将方法设置为静态并不是一个容易的选择。

有没有其他方式来发表这一声明?

谢谢!

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

初始化构造函数内的委托实例?

public class MyClass
{
    private ParameterizedThreadStart starter;
    public MyClass()
    {
        starter = SelectJob;
        Del selectDelegate = SelectJob;
    }
    delegate void Del(string str);
    protected void SelectJob(object index)
    {
    }
}

您可以将其分配给构造函数中的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
                       };
        }
    }