2013-01-13 27 views
0

我有一個應該啓動的進程(C#.exe)的具體數量。我如何根據他們的優先級啓動它們。在啓動之前爲進程分配優先級

我知道Process.PriorityClass的東西,但它並不是很有用,因爲它只在啓動進程後分配優先級。

我在這裏有這個代碼(還沒有比較優先級),但它不工作,因爲過程無法運行,所以我可以優先不分配給他們:

Process process1 = new Process();  
Process process2 = new Process(); 
Process process3 = new Process(); 

process1.StartInfo.FileName = "proc1"; 

process2.StartInfo.FileName = "proc2"' 

process3.StartInfo.FileName = "proc3"; 

process1.PriorityClass = ProcessPriorityClass.AboveNormal; 

process2.PriorityClass = ProcessPriorityClass.BelowNormal; 

process3.PriorityClass = ProcessPriorityClass.High; 

process2.Start(); 

process2.WaitForExit(); 

process1.Start(); 

process1.WaitForExit(); 

process3.Start(); 
+0

究竟是什麼問題?什麼*不運行*? – Blachshma

+0

它說優先級沒有任何對象。但是如果我在啓動過程之後設置了優先級,它就會起作用。但後來我無法按優先級啓動它們 –

回答

1

您可以創建帶進程文件名的字典,然後使用Linq查詢通過ProcessPriorityClass和OrderBy對它們進行排序。然後,您只需執行它們迭代列表併爲其指定正確的優先級即可。

public void StartProcessesByPriority(Dictionary<String, ProcessPriorityClass> values) 
{ 
    List<KeyValuePair<String, ProcessPriorityClass>> valuesList = values.ToList(); 

    valuesList.Sort 
    (
     delegate(KeyValuePair<String, ProcessPriorityClass> left, KeyValuePair<String, ProcessPriorityClass> right) 
     { 
      return left.Value.CompareTo(right.Value); 
     } 
    ); 

    foreach (KeyValuePair<String, ProcessPriorityClass> pair in valuesList) 
    { 
     Process process = new Process(); 
     process.StartInfo.FileName = pair.Key; 
     process.Start(); 

     process.PriorityClass = pair.Value; 

     process.WaitForExit(); 
    } 
} 
+0

我該如何初始化列表? –

+0

手動,完全像您的代碼所做的那樣。例如mydictionary.Add(「proc1」,ProcessPriorityClass.AboveNormal)等,然後在需要時調用該方法。 –

+0

最重要的是......優先級只能分配給正在運行的進程。您無法在之前分配它。 –