2012-03-17 59 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