Здравствуйте, RomikB, Вы писали:
RB>Есть WPF приложение, которое обменивается данными в сети используя класс System.Net.Sockets.TcpClient, получая от него данные асинхронно в отдельнок потоке. Так же есть некоторое количество таймеров System.Threading.Timer которые генярят события (судя по документации все они работают последовательно в неком отдельном потоке). Отрисовка GUI тоже работает отдельно в своем потоке.
RB>Необходимо реализовать отдельный поток в который будут складываться задания по мере срабатывания таймера или прихода данных из сети и их дальнейшая последовательная обработка в этом потоке. Есть ли какой нибудь готовый системный механизм для этого в .NET или прийдется писать что то свое?
В отдельном потоке или в потоке UI? Если в потоке UI, то есть Dispatcher. Если в отдельном, то элементарно реализуется при помощи BlockingCollection и Task:
BlockingCollection<AsyncMessage> queue = new BlockingCollection<AsyncMessage>();
Task.Factory.StartNew(() =>
{
try
{
while (true)
{
AsyncMessage message = queue.Take();
// TODO: ...
}
}
catch (InvalidOperationException)
{
}
});
modalQueue.Add(new AsyncMessage());
modalQueue.Add(new AsyncMessage());
modalQueue.Add(new AsyncMessage());
modalQueue.CompleteAdding();