如何将object []或多个对象传递给enqueueworkitem方法?

时间:2009-02-06 22:54:50

标签: c#

parameterizedthreadstart对象有一个enqueueworkitem。这(如果我能正确记住我的方法及其参数)将对象参数作为“状态”。

但是,当我有一个方法有多个对象参数(例如string,int,它们是对象的子对象)时,我该怎么做才能将所有这些参数传递给enqueueworkitem方法?另外,如果我有一个object []而不是object参数呢?

由于

3 个答案:

答案 0 :(得分:2)

将object []传递给接受对象的函数是完全合法的。任何类型都可以转换为对象。

在被调用的函数中,只需将状态参数强制转换回object [],就可以了。

public void CallThreadPool(object[] arguments) {
  ThreadPool.QueueUserWorkItem(new WaitCallBack(MyThreadProc), arguments);
}

public void MyThreadProc(object state) {
  object[] data = (object[])state;
}

答案 1 :(得分:0)

您始终可以在类型中包装所需的任意数量的参数,并传递该实例。

答案 2 :(得分:0)

就个人而言,我会避免使用“状态”参数 - 它会失去类型安全性(编译器不会检查强制转换)。匿名方法更清晰:

int foo =...;
string bar =...;
ThreadPool.QueueUserWorkItem(delegate {
    YourMethod(foo,bar);
});