我只是一个初学者。“ParameterizedThreadStart”接受单个对象作为参数。
是否还有其他代表签名允许我
(1)在线程上传递params(变量参数)?
(2)支持像list这样的通用参数?
答案 0 :(得分:5)
您可以使用单个对象执行任何操作。只需定义一个类来包装您感兴趣的参数:
class ThreadState
{
public ThreadState()
{
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
// ...
ParameterizedThreadStart start = delegate(object objThreadState)
{
// cast to your actual object type
ThreadState state = (ThreadState)objThreadState;
// ... now do anything you want with it ...
};
答案 1 :(得分:2)
您可以使用Delegate.BeginInvoke和EndInvoke来传递您想要的任何参数
delegate long MyFuncDelegate(int N );
MyFuncDelegate cpn = new MyFuncDelegate(MyFunc);
IAsyncResult ar = cpn.BeginInvoke( 3, null, null );
// Do some stuff
while( !ar.IsCompleted )
{
// Do some stuff
}
// we now know that the call is
// complete as IsCompleted has
// returned true
long answer = cpn.EndInvoke(ar);
答案 2 :(得分:0)
顺便说一下,对于泛型,定义诸如Doer(Of T1),Doer(Of T1,T2)等的类是有用的,这些类具有例如字段。 V1作为T1,V2作为T2等,以及作为动作(动作T1,T2)等,以及调用动作(V1,V2)和静态工厂方法的单个方法Exec(void)等。这使得组装一个MethodInvoker非常容易,该方法使用适当的参数调用函数,即使在VS2005中也是如此。