我在C#中使用BackgroundWorker,并且需要使用AvSetMmThreadCharacteristics将线程的优先级更改为RealTime,并将特性更改为“ Pro Audio”.
由于BackgroundWorker会回收ThreadPool中的线程,因此不建议更改此类属性,但是,如果我不得不重写代码以使用常规Thread()代替,则我会放弃所有其他功能(取消/进度/等).
那么,坚持使用BackgroundWorker线程时会发生什么问题?
解决方法:
只需创建一个单独的线程,即可拥有它.池线程仅用于相对较短的时间,似乎不适合您的情况.
重现进度和取消逻辑并不那么困难.
当您确实更改bgw内部的属性时,请确保将其重新设置(尝试/最终).但是还有其他问题,当您锁定或等待某些操作时,托管池线程可能会切换.至少规范不排除这一点.