我只是一个初学者,“ParameterizedThreadStart”接受单个对象作为参数。线程处理参数
是否有任何其他代表签名允许我
(1)通过对螺纹PARAMS(参数变量数)?
(2)支持列表等通用参数?
我只是一个初学者,“ParameterizedThreadStart”接受单个对象作为参数。线程处理参数
是否有任何其他代表签名允许我
(1)通过对螺纹PARAMS(参数变量数)?
(2)支持列表等通用参数?
你可以做你想做与单个对象什么。只要定义一个类来包装你感兴趣的参数:
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 ...
};
您可以使用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);
顺便说一下,仿制药,是非常有用的定义类,如多尔(T1的),杜尔(中T1,T2)等,它们具有字段例如V1作为T1,V2作为T2等,以及作为动作的(T1,T2)等,以及称为动作(V1,V2)和静态工厂方法的单一方法Exec(void)等。这使得组装一个MethodInvoker非常容易,它可以用适当的参数调用函数,即使在VS2005中也是如此。
或者只传递一个对象数组。 – 2009-10-10 17:47:50
是的,你也可以传递一个数组,这个数组更加轻量级,但是“更安全”。 – bobbymcr 2009-10-10 18:08:58
真的帮了我很多。谢谢。 – user186973 2009-10-10 18:30:10