[英]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.