3

Я использую BackgroundWorker в C#, и мне нужно изменить приоритет потока на RealTime и характеристики на «Pro Audio», используя AvSetMmThreadCharacteristics.C#: BackgroundWorker Thread Priority

Поскольку BackgroundWorker перерабатывает потоки в ThreadPool, не рекомендуется изменять эти свойства, но если мне придется переписать код для использования обычного Thread(), я потеряю все дополнительные функции (отмена/прогресс/и т.д).

Итак, какие проблемы я могу ожидать, когда придерживаюсь ThreadWorker?

ответ

4

Просто создайте отдельный поток, вы его получите. Пул потока предназначен для относительно короткого использования, что, похоже, не соответствует вашему делу.
Воспроизведение логики прогресса и отмены не так сложно.

Когда вы меняете свойства внутри bgw, убедитесь, что вы установили их обратно (попробуйте/наконец). Но есть и другие проблемы, ваш поток управляемого потока можно переключать, когда вы блокируете или ждете чего-то. По крайней мере, спецификации не исключают этого.

+0

Я уже пытался найти код, который имитирует поведение BackgroundWorker, используя обычный поток (например, http://www.codeproject.com/Articles/42103/Generic-Background-Worker), но ни одна из них не поддерживает изменение приоритетов. – Muis

+0

Вы можете отменить любой простой флаг (используйте Interlocked.Exchange) и выполнить отчеты о проделанной работе с помощью Control.Invoke() или аналогичного. –

Смежные вопросы