2010-08-10 60 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