Here is the piece of code, which run through all the process and when It finds the right process, code sends the message. My question is what happened to the 'proc', how to dispose that process.
//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);
}
}
Thanks in advance, Harsha
To make sure all resoucers are freed as early as possible, call Dispose on the process, when you no longer need it.
//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;
}
In general terms you don't need to worry about disposing or deallocating objects, unless the object implements the IDisposable
interface. If it does you should either call the Dispose()
method on it manually when you're finished, or wrap with a using
statement to have it called automatically:
using (var disposableObject = new DisposableType())
{
// do work with disposableObject
}
IF you are looping to find your won process then you could try something like:
Process.GetCurrentProcess();
In any case I would change it to:
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.ToLower() == ProcessName.ToLower())
{
SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero);
}
}
That way no variable will refernce the "GetProcesses" and the GC would eventually handle it.
变量proc
是foreach循环的本地变量,因此一旦循环完成,它将自动被垃圾收集。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.