Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用委托将方法签名传递给线程_C#_Multithreading_Delegates - Fatal编程技术网

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

C# 使用委托将方法签名传递给线程,c#,multithreading,delegates,C#,Multithreading,Delegates,为了表示在线程上执行的方法,我使用 ParameterizedThreadStart并传递方法的名称。在这种情况下,方法名称为SelectJob,实例化如下: ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob); protected void SelectJob(object index) { ... } 为了重用部分代码,如果可能的话,我希望将方法名存储在变量中,但是IntelliS

为了表示在线程上执行的方法,我使用

ParameterizedThreadStart
并传递方法的名称。在这种情况下,方法名称为
SelectJob
,实例化如下:

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob);

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

delegate void Del(string str);
Del selectDelegate = SelectJob;
。。。但是由于
SelectJob
方法不是静态的,所以我无法做到这一点。简单地将方法设置为静态并不是一个容易的选择

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


谢谢

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

public class MyClass
{
    private ParameterizedThreadStart starter;

    public MyClass()
    {
        starter = SelectJob;

        Del selectDelegate = SelectJob;
    }

    delegate void Del(string str);

    protected void SelectJob(object index)
    {

    }
}

您可以将其分配给构造函数中的操作字段:

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

        }

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

        }
    }
类Boo
{
公共广播
{
_myDelegate=SelectJob;
}
行动——我的代表;
受保护的void SelectJob(对象索引)
{
}
}
或者,使用始终返回委托的方法:

   class Hoo
    {


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

                           // do something with o
                       };
        }
    }
class-Hoo
{
受保护的操作SelectJobDelegate(对象索引)
{
返回o=>
{
//用o做点什么
};
}
}

谢谢。我很少研究委托的使用,虽然在概念上并不困难,但我常常难以正确地实例化它们。谢谢你的帮助!