2012-07-10 73 views
1

好了,所以我用这行代码项目线程错误在C#

System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ProcessReport)); 

,但它抛出以下错误

无过载为“ProcessReport”匹配委托“系统。 Threading.WaitCallback

我替换为以下行上述线:

Thread t = new Thread(new ThreadStart(ProcessReport)); 
t.Start(); 

这消除了错误,但这是正确的做法。由于我是公司的实习生,所以我无法在那里查看输出结果,这是整个大型项目的一部分。请帮忙。

我不能发布整个ProcessReport因为我不允许,但它始于此:

公共无效ProcessReport()

+6

请发布您的ProcessReport的定义。它应该匹配这个委托定义:public delegate void WaitCallback( \t Object state ) – Nik 2012-07-10 17:45:04

+6

ProcessReport的签名是什么样的?它应该看起来像'void ProcessReport(object state)' – vcsjones 2012-07-10 17:45:19

回答

4

我的假设是,由于这个编译:

new ThreadStart(ProcessReport) 

您的ProcessReport方法看起来是这样的:

void ProcessReport() 
{ 
} 

QueueUserWorkItem需要WaitCallback委托,这需要经过一个单一的对象作为参数。所以改变你的方法的签名看起来像这样:

void ProcessReport(object state) 
{ 
} 

你应该没问题。 state参数如果您不需要使用它可以忽略,但它的值是您通过QueueUserWorkItem的第二个参数传入的任何值。由于您正在使用不会将对象传递到QueueUserWorkItem的重载,它将始终为空。

+0

hmmm。我会试试看。非常感谢这么快的回复 – Mayank 2012-07-10 18:19:02

0

一个可与

线程t =新主题发生可能的问题(新的ThreadStart(ProcessReport));

t.Start();

是,如果你以这种方式启动这么多线程,不检查任何条件,你的计划很可能在某些情况下崩溃,甚至系统。但是,如果它是一个应用程序,该事件必须在该线程启动之前发生,那么您的代码应该没问题。

+0

thanx的信息。 – Mayank 2012-07-10 18:19:58