C#:BackgroundWorker线程优先级

C#:BackgroundWorker线程优先级,c#,multithreading,asynchronous,backgroundworker,threadpool,C#,Multithreading,Asynchronous,Backgroundworker,Threadpool,我正在使用C#中的BackgroundWorker,我需要使用AvSetMmThreadCharacteristics将线程的优先级更改为RealTime,将characteristics更改为“Pro Audio” 由于BackgroundWorker回收线程池中的线程,因此不建议更改此类属性,但如果我必须重写代码以使用普通线程(),我会丢失所有额外的内容(取消/进度等) 那么,当坚持使用BackgroundWorker线程时,我会遇到什么问题呢?只需创建一个单独的线程,您就拥有了它。池线程的

我正在使用C#中的BackgroundWorker,我需要使用AvSetMmThreadCharacteristics将线程的优先级更改为RealTime,将characteristics更改为“Pro Audio”

由于BackgroundWorker回收线程池中的线程,因此不建议更改此类属性,但如果我必须重写代码以使用普通线程(),我会丢失所有额外的内容(取消/进度等)


那么,当坚持使用BackgroundWorker线程时,我会遇到什么问题呢?

只需创建一个单独的线程,您就拥有了它。池线程的使用时间相对较短,似乎不适合您的情况。
复制进度和取消逻辑并不困难


当您确实更改bgw内的属性时,请确保将它们设置回原来的位置(try/finally)。但还有其他问题,当您锁定或等待某个对象时,托管池线程可能会被切换。至少说明书上没有排除这种可能性

我已经尝试过使用普通线程(如)找到一些模拟BackgroundWorker行为的代码,但没有一个代码支持更改优先级。您可以取消任何简单标志(使用Interlocked.Exchange),并使用Control.Invoke()或类似工具完成进度报告。