2010-08-10 83 views
4

我有兩個ArrayList。即現有流程和當前流程。使用c比較兩個ArrayList內容#

ExistingProcess arraylist包含此應用程序啓動時正在運行的進程的列表。

CurrentProcess arraylist處於一個線程中,以便始終讀取系統中運行的進程。

每次currentProcess ArrayList中獲取當前的進程在運行,我想要做的與ExistingProcess ArrayList和顯示在一個消息像一比較,

缺少的過程:記事本[如記事本被關閉,應用程序啓動] 新過程:MsPaint [如果MSPaint是在應用程序啓動後啓動的]

基本上這是一個比較兩個arraylist來查找啓動的新進程並在我的c#應用程序啓動後關閉進程。

希望我的問題是清楚的。需要幫助。

回答

3

首先,檢查第一個列表並從第二個列表中刪除每個項目。反之亦然。

var copyOfExisting = new ArrayList(ExistingProcess); 
    var copyOfCurrent = new ArrayList(CurrentProcess); 

    foreach(var p in ExistingProcess) copyOfCurrent.Remove(p); 
    foreach(var p in CurrentProcess) copyOfExisting.Remove(p); 

之後,第一個列表將包含所有缺失的進程,第二個 - 所有新進程。

+0

u能告訴我如何打印缺失和新流程messagebox?謝謝。 – Anuya 2010-08-10 03:37:12

+0

這取決於你的環境是什麼以及你用於GUI的東西。 – 2010-08-10 03:50:42

5

你可以使用LINQ Except。

除了產生兩個 序列的設置差異。

樣品:

http://msdn.microsoft.com/en-us/library/bb300779.aspx

http://msdn.microsoft.com/en-us/library/bb397894%28VS.90%29.aspx

代碼來說明這個想法...

static void Main(string[] args) 
{ 
    ArrayList existingProcesses = new ArrayList(); 

    existingProcesses.Add("SuperUser.exe"); 
    existingProcesses.Add("ServerFault.exe"); 
    existingProcesses.Add("StackApps.exe"); 
    existingProcesses.Add("StackOverflow.exe"); 

    ArrayList currentProcesses = new ArrayList(); 

    currentProcesses.Add("Games.exe"); 
    currentProcesses.Add("ServerFault.exe"); 
    currentProcesses.Add("StackApps.exe"); 
    currentProcesses.Add("StackOverflow.exe"); 

    // Here only SuperUser.exe is the difference... it was closed. 
    var closedProcesses = existingProcesses.ToArray(). 
          Except(currentProcesses.ToArray()); 

    // Here only Games.exe is the difference... it's a new process. 
    var newProcesses = currentProcesses.ToArray(). 
         Except(existingProcesses.ToArray()); 
} 
+0

您的代碼將內容與其確切的數組位置相匹配。但我想與對方檢查。因爲當我與進程名稱比較時,順序可能會有所不同。 – Anuya 2010-08-10 04:16:24

+0

作爲實施代碼的結果,它將所有內容都顯示爲新進程以及封閉進程的所有內容。因爲它會一對一地進行檢查。它不應該是這樣。對 ? – Anuya 2010-08-10 04:17:52

+0

項目的順序不會影響結果。從我的理解來看,這正是你需要的。它會給你兩個清單:1個用於關閉進程,1個用於新進程。 – 2010-08-10 04:34:56