2010-08-10 7 views
4

두 명의 arraylist가 있습니다. 즉, ExistingProcess 및 CurrentProcess.두 개의 ArrayList 내용 비교 C#

ExistingProcess arraylist에는이 응용 프로그램이 시작될 때 실행 중이던 프로세스 목록이 포함되어 있습니다.

CurrentProcess arraylist는 시스템에서 항상 실행중인 프로세스를 가져 오는 스레드에 있습니다.

currentProcess의 ArrayList를 현재 실행중인 프로세스를 얻을 때마다, 나는

프로세스를 누락, A는 메시지 박스와 같은에서 ExistingProcess의 ArrayList를하고 쇼와 비교하고 싶지 : 메모장을 [메모장이 닫히고 응용 프로그램이 시작되면] 새 프로세스 : MsPaint [응용 프로그램 시작 후 MSPaint가 시작된 경우]

기본적으로 이것은 C# 응용 프로그램이 시작된 후 시작된 새 프로세스와 프로세스가 닫혔는지 확인하는 두 명의 arraylist를 비교 한 것입니다.

희망 사항은 분명합니다. 도움이 필요하다.

답변

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는 방법에 누락 및 새로운 프로세스를 인쇄하는 방법을 말해 줄래 메세지 박스 ? 감사. – Anuya

+0

환경에 따라 다르며 GUI 환경에 따라 다릅니다. –

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

+0

코드를 구현 한 결과 모든 것을 새로운 프로세스로 표시하고 모든 것을 Closed 프로세스로 표시합니다. 일대일 검사이기 때문에. 그것은 그렇게해서는 안됩니다. 권리 ? – Anuya

+0

항목의 순서는 결과에 영향을 미치지 않습니다. 내가 이해 한 바로는 이것이 정확히 당신이 필요로하는 것입니다. 닫힌 프로세스는 1이고 새 프로세스는 1입니다. –