繁体   English   中英

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

[英]ThreadPool.QueueUserWorkItem Error when run method in separate thread in c# 2.0

我有一个代码可以通过线程调用任何方法。

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

在这里,我尝试通过线程运行Export()方法,并得到编译错误。 代码有什么问题。 我正在使用C#2.0版本。 请帮忙。

QueueUserWorkItem需要一个委托,但是您正在调用Export方法,然后尝试将Export结果传递给QueueUserWorkItem方法。 换句话说,就好像您正在跑步:

var result = Export();
ThreadPool.QueueUserWorkItem(result);

显然,这不会在另一个线程中运行Export ...

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

ThreadPool.QueueUserWorkItem(Export);

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

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

方法Export是否返回类型为WaitCallback的委托? 如果不是,那么您正在为QueueUserWorkItem提供错误的参数。 为了清楚起见,您需要提供符合以下签名的委托:

public delegate void WaitCallback(
    Object state
)

因此,方法Export应该具有以下签名:

public void Export(object state)

并按以下方式提供给QueueUserWorkItem

ThreadPool.QueueUserWorkItem(Export)

或者,如果Export的签名不同,则可以使用中间委托来调用它:

ThreadPool.QueueUserWorkItem(state=>Export())

或者,如果Export需要参数,则可以:

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

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

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

}

状态是一个参数,您可以在调用QueueUserWorkItem()时将其传递给回调函数

提供Export匹配要提供给QueueUserWorkItem的委托,请执行以下操作:

ThreadPool.QueueUserWorkItem(Export);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM