2012-02-14 193 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