2011-02-23 9 views
7

여기 코드는 모든 프로세스를 통과하며 올바른 프로세스를 찾으면 코드가 메시지를 보냅니다. 내 질문은 'proc'에 어떤 일이 일어 났는가, 어떻게 그 프로세스를 처리 할 것인가이다. 사전에foreach 루프의 프로세스

//get all other (possible) running instances 
     Process[] processes = Process.GetProcesses();    
     foreach (Process proc in processes) 
     { 
      if (proc.ProcessName.ToLower() == ProcessName.ToLower()) 
      { 
       SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero); 
      }    
     } 

감사합니다, Harsha에

+0

두려워 :) –

+0

GC는 원조에 올 것이다 말라! – Joe

+1

'Equals' 메쏘드를 사용하여 대소 문자를 구별하지 않는 문자열 비교를 명시 적으로 나타낼 수 있습니다 :'if (proc.ProcessName.Equals (ProcessName, StringComparison.OrdinalIgnoreCase))' –

답변

5

하지 않는 개체는 IDisposable 인터페이스를 구현합니다. 그것은 당신이 자동으로 호출하도록 작업이 완료되면 수동에 Dispose() 메소드를 호출하거나 using 문으로 포장해야 하나 않는 경우 :

using (var disposableObject = new DisposableType()) 
{ 
    // do work with disposableObject 
} 
+0

까지 실행될 때까지 리소스가 매달리지 않도록합니다.이 경우 코드 인용은 프로세스의 수명 만료를 표시하지 않기 때문에 메시지가 표시되지 않도록해야합니다. – Massif

+0

'using' 문은이 경우에 도움이되지 않습니다. 왜냐하면'GetProcesses'가 모든 인스턴스화를하기 때문입니다. – Groo

+1

@Massif : Process 개체를 Dipsosing하면 프로세스가 닫히지 않고 핸들 만 처리됩니다. 핸들을 처리하지 않으면 GC가 Process 객체를 수집 할 때까지 관리되지 않는 리소스를 낭비합니다. – eFloh

-1

는 .NET Framework에에 둡니다. 당신은 걱정하지 않아도 그것에 대해

+2

-1. System.Diagnostics.Process는 System.ComponentModel.Component를 상속하므로 IDisposable을 구현합니다. IDisposable을 구현하는 모든 객체는'using '을 사용하거나 Dispose()를 직접 호출하여 처리해야합니다. – erikkallen

+1

그리고 btw, Process.Dispose가 흥미로운 일을합니다. – erikkallen

-1

당신은 당신은 같은 것을 시도 할 수 귀하의 수상 과정을 찾기 위해 반복되는 경우 : 내가로 변경하는 어떤 경우

Process.GetCurrentProcess(); 

을 :

foreach (Process proc in Process.GetProcesses()) 
    { 
     if (proc.ProcessName.ToLower() == ProcessName.ToLower()) 
     { 
      SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero); 
     }    
    } 

그 way 변수는 "GetProcesses"를 참조하고 GC는 결국 그것을 처리합니다.

+0

그러면 GC가 실행될 때까지 ressources가 잠길 것입니다. – eFloh

-2

변수 proc은 foreach 루프에 국한되므로 루프가 완료되면 자동으로 가비지 수집됩니다.

+0

은 GC가 – eFloh

5

모든 resoucers가 가능한 한 빨리 해제되었는지 확인하려면 더 이상 필요없는 프로세스의 Dispose를 호출하십시오. 당신이 객체를 폐기 또는 할당 해제에 대해 걱정할 필요가 없습니다 일반적인 용어로

//get all other (possible) running instances 
Process[] processes = Process.GetProcesses(); 
try 
{ 
    foreach (Process proc in processes) 
    { 
    // use proc 
    } 
} 
finally 
{ 
    foreach (Process proc in processes) 
     proc.Dispose(); 
    processes = null; 
} 
관련 문제