Я использую приведенный ниже код, чтобы найти любой новый процесс. Эта функция работает в потоке.Ищите новый процесс, запущенный с помощью C#
Мне нужно ввести имя процесса. Для чего я использую два arraylist. На одном arraylist я сохраняю все имена процессов до того, как он начнет поток, а другой arraylist, заполните текущий процесс внутри потока и сравните два arraylist, чтобы найти новый процесс.
Проблема в том, что строка для записи в файл журнала находится для каждого цикла, я вижу повторные имена процессов в файле журнала. Я хочу, чтобы он регистрировался только один раз. Как я могу это решить?
class ProcessMonitor
{
public static ArrayList ExistingProcess = new ArrayList();
public static void Monitor()
{
existingProcesses = GetExistingProcess();
while (true)
{
ArrayList currentProcesses = new ArrayList();
currentProcesses = GetCurrentProcess();
ArrayList NewApps = new ArrayList(GetCurrentProcess());
foreach (var p in ExistingProcess)
{
NewApps.Remove(p);
}
string str = "";
foreach (string NewApp in NewApps)
{
str += "Launched ProcessName/ID : " + NewApp + "/" + System.Diagnostics.Process.GetProcessesByName(NewApp)[0].Id.ToString() + Environment.NewLine;
}
if(str!="")
{
Log.Info(str);
}
}
}
public static ArrayList GetExistingProcess()
{
Process[] processlist = Process.GetProcesses();
foreach (Process Proc in processlist)
{
ExistingProcess.Add(Proc.ProcessName);
}
return ExistingProcess;
}
public static ArrayList GetCurrentProcess()
{
ArrayList CurrentProcesses = new ArrayList();
Process[] processlist = Process.GetProcesses();
foreach (Process Proc in processlist)
{
CurrentProcesses.Add(Proc.ProcessName);
}
return CurrentProcesses;
}
}
Использовать набор данных (хэш-набор) данных + цикл foreach возможно? –
@Hamish Grubijan, не могли бы вы дать мне пример, пожалуйста .. спасибо – Anuya
, вы больше не должны использовать 'ArrayList'. Вместо этого используйте «Список». –