У меня есть служба Windows, которая выполняет много работы одновременно. Я изучил потоки и нашел класс ThreadPool. В настоящее время я застрял, похоже, это не имеет никакого эффекта, это похоже на то, что я ставлю в очередь, никогда не запускается и не вызывается. В событии службы OnStart() я создаю такой поток:
Thread mainThread = new Thread(ReceiveMessages);
mainThread.Start();
Внутри метода ReceiveMessages() у меня есть процедура, которая проверяет очередь сообщений, а затем перебирает сообщения. Для каждой итерации я вызываю следующий код, чтобы выполнить некоторую работу с каждым сообщением:
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state)
{
Interpreter.InsertMessage(encoding.GetBytes(MessageBody));
}), null);
Я думаю, что синтаксис правильный, он компилируется без проблем, но я не могу не чувствовать, что я что-то упускаю. Когда я запускаю службу, ничего не происходит. Однако, если я заменю приведенный выше фрагмент кода следующим:
insertThread = new Thread(delegate() { Interpreter.InsertMessage(encoding.GetBytes(MessageBody)); });
insertThread .Start();
Это работает на 100%. Однако это не очень эффективно и может привести к сбою службы (что иногда происходит, поэтому я пытаюсь использовать вместо этого TheadPool). Кто-нибудь может пролить свет на эту тему?