1

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

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

但它抛出以下错误

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

我将上述行替换为以下行:

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

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

我不能发布整个 ProcessReport,因为我不允许这样做,但它以此开头:

公共无效进程报告()

4

2 回答 2

6

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

new ThreadStart(ProcessReport)

您的ProcessReport方法如下所示:

void ProcessReport()
{
}

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

void ProcessReport(object state)
{
}

你应该没事。state如果您不需要使用该参数,您可以忽略它,但它的值是您作为QueueUserWorkItem. 由于您使用的重载不会将对象传递给QueueUserWorkItem,因此它将始终为空。

于 2012-07-10T17:47:52.790 回答
0

可能发生的问题之一

线程 t = new Thread(new ThreadStart(ProcessReport));

t.Start();

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

于 2012-07-10T17:53:04.717 回答