C#中的线程错误

时间:2012-07-10 17:43:53

标签: c#

好的,我在项目中使用这行代码

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

但是它会抛出以下错误

  

“ProcessReport”没有重载与委托“System.Threading.WaitCallback

匹配

我用以下几行替换上面提到的行:

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

这删除了错误,但这是正确的方法。我无法检查输出,因为我是公司的实习生,这是整个大项目的一部分。请帮忙。

我不能发布整个ProcessReport,因为我不被允许,但它从这开始:

  
    

public void ProcessReport()

  

2 个答案:

答案 0 :(得分:6)

我的假设是,因为这编译:

new ThreadStart(ProcessReport)

您的ProcessReport方法如下所示:

void ProcessReport()
{
}

QueueUserWorkItem需要WaitCallback委托,这需要传递一个对象作为参数。因此,将方法的签名更改为:

void ProcessReport(object state)
{
}

你应该没问题。如果您不需要使用它,则可以忽略state参数,但它的值是您作为QueueUserWorkItem的第二个参数传入的任何值。由于您使用的是不将对象传递给QueueUserWorkItem的重载,因此它始终为null。

答案 1 :(得分:0)

可能出现的问题之一
  

线程t =新线程(新的ThreadStart(ProcessReport));

     

t.Start();

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