我有两个arraylist。即ExistingProcess和CurrentProcess。
ExistingProcess arraylist包含此应用程序启动时运行的进程列表。
CurrentProcess arraylist位于一个线程中,用于一直获取系统中运行的进程。
每当currentProcess arraylist让当前进程运行时,我想与ExistingProcess arraylist进行比较,并在消息框中显示,如
缺少进程:NotePad [如果记事本已关闭且应用程序已启动] 新流程:MsPaint [如果MSPaint在应用程序启动后启动]
基本上这是两个arraylist的比较,以找出启动c#应用程序后启动和处理关闭的新流程。
希望我的问题很明确。需要帮助。
答案 0 :(得分: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());
}
答案 1 :(得分: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 );
之后,第一个列表将包含所有缺少的进程,第二个列表将包含所有新进程。