【发布时间】:2011-02-11 06:38:42
【问题描述】:
我有一个 Windows 服务,它同时有很多工作要做。我研究了线程并找到了 ThreadPool 类。我目前被卡住了,它似乎没有任何效果,就像我排队的任何东西都不会运行或调用。在服务的 OnStart() 事件中,我创建了一个这样的线程:
Thread mainThread = new Thread(ReceiveMessages);
mainThread.Start();
在 ReceiveMessages() 方法中,我有一个检查消息队列然后遍历消息的例程。对于每次迭代,我都会调用以下代码来处理每条消息:
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state)
{
Interpreter.InsertMessage(encoding.GetBytes(MessageBody));
}), null);
我认为语法是正确的,它编译没有问题,但我不禁觉得我错过了一些东西。当我运行该服务时,什么也没有发生。但是,如果我将上面的代码 sn-p 替换为:
insertThread = new Thread(delegate() { Interpreter.InsertMessage(encoding.GetBytes(MessageBody)); });
insertThread .Start();
它 100% 有效。虽然它不是很有效,并且可能导致服务崩溃(偶尔会发生,这就是我尝试使用 TheadPool 的原因)。任何人都可以对这个主题有所了解吗?
【问题讨论】:
标签: c# multithreading .net-3.5 threadpool