Какой метод работы потоков мне нужно использовать? - PullRequest
1 голос
/ 14 марта 2012

У меня есть приложение аудиоплеера (c # .NET 4.0 WPF), которое получает аудиопоток из Интернета и воспроизводит его.Приложение также отображает сигналы и спектры и сохраняет аудио на локальный диск.Это также делает еще несколько вещей.

Моя очередь - когда я получаю новый байтовый пакет из Интернета и мне нужно воспроизвести их (и, возможно, записать их на локальный диск и т. Д.), Нужно ли мне использовать потоки?Я пытаюсь сделать все с основным потоком, и он, кажется, работает хорошо.

Я могу работать с пулом потоков для каждого байта пакета, который я получил в моем соединении.Это разумный подход?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Для этого вы можете использовать Task Parallel Library (TPL) . Библиотека параллельных задач (TPL) - это набор открытых типов и API-интерфейсов в пространствах имен System.Threading и System.Threading.Tasks в .NET Framework версии 4. Цель TPL - повысить производительность труда разработчиков, упростив процесс добавления параллелизма и параллелизма к приложениям. TPL динамически масштабирует степень параллелизма, чтобы наиболее эффективно использовать все доступные процессоры. Кроме того, TPL обрабатывает разделение работы, планирование потоков в ThreadPool, поддержку отмены, управление состоянием и другие подробности низкого уровня.

Другой вариант (если выполняемые вами операции выполнялись достаточно долго) - это класс BackgroundWorker . Компонент BackgroundWorker дает вам возможность асинхронно выполнять трудоемкие операции («в фоновом режиме») в потоке, отличном от основного потока пользовательского интерфейса вашего приложения. Чтобы использовать BackgroundWorker, вы просто указываете, какой трудоемкий рабочий метод выполнять в фоновом режиме, а затем вызываете метод RunWorkerAsync. Ваш вызывающий поток продолжает нормально работать, пока рабочий метод работает асинхронно. Когда метод завершен, BackgroundWorker предупреждает вызывающий поток, вызывая событие RunWorkerCompleted, которое дополнительно содержит результаты операции. Это может быть не лучшим вариантом для вас, если у вас есть много операций, чтобы выполнить последовательно.

Следующая альтернатива, которая была в значительной степени заменена TPL, - это Класс потока . Это не так просто использовать в TPL, и вы можете делать все, используя TPL, как вы можете использовать класс Thread (ну почти), и TPL намного удобнее для пользователя.

Надеюсь, это поможет.

0 голосов
/ 14 марта 2012

Я предлагаю использовать 2 потока: в одном вы загружаете пакеты из Интернета и помещаете их в очередь (это может быть поток пользовательского интерфейса, если вы используете асинхронную загрузку), а в другом потоке вы анализируете очередь и обрабатываете пакеты из нее.

...