Re: Общий поток для всех обработок
От: Gremlin2 http://www.fb2library.net/
Дата: 26.10.12 10:28
Оценка:
Здравствуйте, 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();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.