以下是贯穿所有进程的代码段,当它找到正确的进程时,代码会发送消息。我的问题是'proc'发生了什么,如何处理这个过程。
//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);
}
}
提前致谢, 戒日
答案 0 :(得分:5)
要确保尽快释放所有资源,请在您不再需要时调用该过程的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;
}
答案 1 :(得分:5)
一般而言,您无需担心处置或取消分配对象,除非对象实现IDisposable
接口。如果是这样的话,你应该在完成时手动调用Dispose()
方法,或者用using
语句换行以自动调用它:
using (var disposableObject = new DisposableType())
{
// do work with disposableObject
}
答案 2 :(得分:-1)
将其保留在.NET Framework上。你无需担心它
答案 3 :(得分:-1)
如果您要循环查找您赢得的流程,那么您可以尝试以下方式:
Process.GetCurrentProcess();
无论如何我会把它改为:
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.ToLower() == ProcessName.ToLower())
{
SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero);
}
}
这样,没有变量会引用“GetProcesses”,GC最终会处理它。
答案 4 :(得分:-2)
变量proc
是foreach循环的本地变量,因此一旦循环完成,它将自动被垃圾收集。