У меня есть служба 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). Кто-нибудь может пролить свет на эту тему?