在c#2.0中的单独线程中运行方法时出现ThreadPool.QueueUserWorkItem错误

在c#2.0中的单独线程中运行方法时出现ThreadPool.QueueUserWorkItem错误,c#,C#,我得到了一个通过线程调用任何方法的代码 System.Threading.ThreadPool.QueueUserWorkItem(Export()); 在这里,我试图通过线程运行Export()方法,但得到了编译错误。代码中有什么错误。我使用的是c#2.0版本。请帮忙 QueueUserWorkItem接受委托,但您正在调用Export方法,然后尝试将Export的结果传递给QueueUserWorkItem方法。换句话说,就好像你在跑步: var result = Export(); Th

我得到了一个通过线程调用任何方法的代码

System.Threading.ThreadPool.QueueUserWorkItem(Export());

在这里,我试图通过线程运行Export()方法,但得到了编译错误。代码中有什么错误。我使用的是c#2.0版本。请帮忙

QueueUserWorkItem
接受委托,但您正在调用
Export
方法,然后尝试将
Export
的结果传递给
QueueUserWorkItem
方法。换句话说,就好像你在跑步:

var result = Export();
ThreadPool.QueueUserWorkItem(result);
这显然不会在另一个线程中运行
Export

假设导出方法的签名正确,只需将其从方法调用更改为方法组转换:

ThreadPool.QueueUserWorkItem(Export);
编辑:如果需要为Export方法提供参数,最简单的方法是使用lambda表达式(假设使用的是C#3)。例如:

ThreadPool.QueueUserWorkItem(state => Export(filename));

方法
Export
是否返回类型为
WaitCallback
的委托?如果没有,则说明您向
QueueUserWorkItem
提供了错误的参数。为明确起见,您需要提供符合以下签名的委托:

public delegate void WaitCallback(
    Object state
)
public void Export(object state)
因此,方法
Export
应具有以下签名:

public delegate void WaitCallback(
    Object state
)
public void Export(object state)
并提供给
QueueUserWorkItem
,如下所示:

ThreadPool.QueueUserWorkItem(Export)
或者,如果
Export
具有不同的签名,则可以使用中间代理来调用它:

ThreadPool.QueueUserWorkItem(state=>Export())
或者,如果导出需要参数,您可以:

ThreadPool.QueueUserWorkItem(state=>Export(some,parameters))

提供
Export
与要提供到
QueueUserWorkItem
do中的委托匹配:

ThreadPool.QueueUserWorkItem(Export);

通过使用括号编写
Export()
,您正在调用该方法,而不是传递给
QueueUserWorkItem
,以便在单独的线程上调用。

您可能必须编写
ThreadPool.QueueUserWorkItem(新的WaitCallback(Export))
并修改Export以具有object类型的单个参数,即:

Export(object state)
{
......

}

状态是一个参数,当您调用
QueueUserWorkItem()

如果需要如何传递方法参数时,您可以将trought传递给回调函数,因为您告诉我不要给出括号,我的意思是()。请用示例代码向我展示解决方案。@Thomas:请参阅我的编辑。但真正理解这里发生的事情是非常重要的——您可能需要阅读一般的委托,特别是lambda表达式。如果需要,如何传递方法参数,因为您告诉我不要给括号,我的意思是()。plzz向我展示带有示例代码的解决方案。