使用委托给线程传递方法签名
问题描述:
为了表示在线程上执行的方法,我使用 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
方法也不是一成不变的,我没有能够做到这一点。简单地将该方法设为静态并不是一个简单的选择。
有没有其他的方式来做出这个声明?
谢谢!
答
在构造函数中初始化委托实例?
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)
{
}
}
另外,有一个总是返回你的委托方法:
class Hoo
{
protected Action<object> SelectJobDelegate(object index)
{
return o =>
{
// do something with o
};
}
}
谢谢。我很少关注代表的使用,虽然在概念上并不困难,但我经常很难正确实例化它们。感谢您的帮助! – McArthey 2012-03-08 15:52:38
不客气。 – 2012-03-08 15:54:29