2012-02-14 58 views
3

我在C#中使用BackgroundWorker,我需要使用AvSetMmThreadCharacteristics将线程的优先级更改为RealTime和特征为“专业音频”。由于BackgroundWorker回收ThreadPool中的线程,因此不建议更改这些类型的属性,但是如果我必须重写代码以使用正常的Thread(),而是将所有额外内容(cancel/progress /等等)。C#:BackgroundWorker线程优先

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

回答

4

只要创建一个单独的线程,你会拥有它。游泳池线程的用途相对较短,似乎不适合您的情况。
重现进度和取消逻辑并不困难。

当您更改bgw中的属性时,请确保将其设置回(try/finally)。但还有其他问题,当您锁定或等待某些内容时,您的Managed Pool线程可能会被切换。至少规格不排除。

+0

我已经尝试使用普通线程(如http://www.codeproject.com/Articles/42103/Generic-Background-Worker)找到一些模仿BackgroundWorker行为的代码,但都不支持更改优先级。 – Muis 2012-02-14 11:50:27

+0

您可以取消任何简单标志(使用Interlocked.Exchange)并使用Control.Invoke()或类似工具完成进度报告。 – 2012-02-14 11:56:36