我得到了一个通过线程调用任何方法的代码。
System.Threading.ThreadPool.QueueUserWorkItem(Export());
这里我尝试通过线程运行Export()方法并得到编译错误。代码有什么问题。我正在使用c#2.0版本。请帮忙。
答案 0 :(得分:2)
QueueUserWorkItem
需要代理,但您正在调用Export
方法,然后尝试将Export
的结果传递给QueueUserWorkItem
} 方法。换句话说,就好像你正在运行:
var result = Export();
ThreadPool.QueueUserWorkItem(result);
显然不将在另一个帖子中运行Export
...
假设Export
方法的签名是正确的,您只需将其从方法调用更改为方法组转换:
ThreadPool.QueueUserWorkItem(Export);
编辑:如果需要为Export方法提供参数,最简单的方法是使用lambda表达式(假设您使用的是C#3)。例如:
ThreadPool.QueueUserWorkItem(state => Export(filename));
答案 1 :(得分:2)
方法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))
答案 2 :(得分:2)
您可能必须编写ThreadPool.QueueUserWorkItem(new WaitCallback(Export))
并修改export以具有object类型的单个参数,即:
Export(object state)
{
......
}
当您调用QueueUserWorkItem()
答案 3 :(得分:1)
提供Export
匹配要提供给QueueUserWorkItem
的代理人:
ThreadPool.QueueUserWorkItem(Export);
通过使用括号编写Export()
,您调用方法而不是传递给QueueUserWorkItem
以在单独的线程上调用。