2012-03-17 64 views
3

我有一個動作的線程的優先級,更改操作

var act = new Action(() => 
{ 
    while (true) 
    { 
    //Some Codes! 
    } 
}); 
act.BeginInvoke(null, null); 

我怎樣才能提高運行此動作的線程的優先級? 我知道我怎麼能在簡單的線程中做到這一點。

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

但是,行動的優先級怎麼樣?

+0

目前尚不清楚你想要做什麼。除此之外,不要手動更改線程的優先級,這意味着很少。如果您遇到性能問題,請查看您是否可以改進代碼而不是使用線程優先級來執行,因爲行爲未定義,並且可能會有所不同 – Polity 2012-03-17 06:07:49

+0

沒有意義,線程不會執行任何操作。 – 2012-03-17 06:11:13

+0

我重寫了我的問題,以便使其更清楚,因爲我的程序有2個線程,我想讓它更高! – mefmef 2012-03-17 06:12:15

回答

4

BeginInvoke會將您的任務排隊到ThreadPool。您無法控制標準.NET ThreadPool的調度。一旦代碼實際執行,您只能控制線程。

警告:更改ThreadPool線程的優先級被認爲是危險的。延伸閱讀:.NET: Why not change the priority of a ThreadPool (or Task) thread?

如果你能解釋你想達到的目標,或許你可以得到更好的解決方案?

+0

我試圖爲一個人形機器人女巫編寫一些代碼,其中有兩個不同的動作控制器,一個用於視覺過程。有些時候,由於缺乏資源,我認爲如果我改變運動線程的優先級,它可能會解決問題! – mefmef 2012-03-17 06:16:25

+1

ThreadPool適用於在資源可用時可以在後臺執行的代碼。對於需要執行保證的事情,您應該啓動一個專用線程來運行這些線程。 – 2012-03-17 06:20:02