Написал приложение, у которого есть несколько функций, которые всё время крутят цикл while. Это защита от запуска диспетчера задач и ЮсбСерчер, они стоят на while(true) циклах, тем самым, не давая выполняться другим методам, да и вообще, когда в какой-то из этих метов заходит программа, то она весит только на нём, а дальше не идёт. А мне надо сделать так, чтобы и другие методы выполнялись тоже. async static Task Main(string[] args) { //AutoRun(IsInAutoRun()); //Crash(); //USBSearcher(); //ToDef(); //Defense(); await StartDefensive(); Sql(IPAdress(), GetMacAdress(), NameOfPC(), DateTime.Now); //SecondSaveFile(); //HideConsole(); //AllPathesToSave(); async static Task StartDefensive() { Console.WriteLine("Подготовка к запуску защиты"); await Task.Run(() => Defense()); Console.WriteLine("Защита запущена!"); } public static void Defense() { bool attack = false; while (1 > 0) { Thread.Sleep(2000); Console.WriteLine("Защита работает"); Process[] procList = Process.GetProcesses(); string[] attackedProcess = { "processhacker", "taskmgr" }; foreach (Process p in procList) { for (int i = 0; i < attackedProcess.Length; i++) { if (p.ProcessName.ToLower() == attackedProcess[i]) { Console.WriteLine("Detected: " + p.ProcessName); attack = true; if (attack) { Console.WriteLine("Процесс прекращён"); string[] exit = { "false" }; Main(exit); } } else { continue; } } } Console.WriteLine("\n"); if (attack) { break; } } } public static void USBSearcher() { Console.Write("Add Path: "); string PATH = Console.ReadLine(); while (true) { Thread.Sleep(2000); foreach (var dInfo in DriveInfo.GetDrives()) { if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable) { Console.WriteLine(dInfo); string USBPath = dInfo.ToString(); try { string outFile =USBPath + Path.GetFileName(PATH); ; File.Move(PATH, outFile); Console.WriteLine("Yes"); } catch { Console.WriteLine("No"); } } else { Console.WriteLine("No"); continue; } } } } Код async static Task Main(string[] args) { //AutoRun(IsInAutoRun()); //Crash(); //USBSearcher(); //ToDef(); //Defense(); await StartDefensive(); Sql(IPAdress(), GetMacAdress(), NameOfPC(), DateTime.Now); //SecondSaveFile(); //HideConsole(); //AllPathesToSave(); async static Task StartDefensive() { Console.WriteLine("Подготовка к запуску защиты"); await Task.Run(() => Defense()); Console.WriteLine("Защита запущена!"); } public static void Defense() { bool attack = false; while (1 > 0) { Thread.Sleep(2000); Console.WriteLine("Защита работает"); Process[] procList = Process.GetProcesses(); string[] attackedProcess = { "processhacker", "taskmgr" }; foreach (Process p in procList) { for (int i = 0; i < attackedProcess.Length; i++) { if (p.ProcessName.ToLower() == attackedProcess[i]) { Console.WriteLine("Detected: " + p.ProcessName); attack = true; if (attack) { Console.WriteLine("Процесс прекращён"); string[] exit = { "false" }; Main(exit); } } else { continue; } } } Console.WriteLine("\n"); if (attack) { break; } } } public static void USBSearcher() { Console.Write("Add Path: "); string PATH = Console.ReadLine(); while (true) { Thread.Sleep(2000); foreach (var dInfo in DriveInfo.GetDrives()) { if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable) { Console.WriteLine(dInfo); string USBPath = dInfo.ToString(); try { string outFile =USBPath + Path.GetFileName(PATH); ; File.Move(PATH, outFile); Console.WriteLine("Yes"); } catch { Console.WriteLine("No"); } } else { Console.WriteLine("No"); continue; } } } } Помимо этих методов, должны работать и другие, но они должны работать вместе с защитой. т.е., когда защита срабатывает, работа приложения должна либо завершиться полностью, либо заморозиться на время. Как сделать так, чтобы другие методы работали под защитой? Пробовал async,await, ничего не выходит
Thread.Sleep - остановка программы Приложение полностью не работает промежуток времени который там указан --- Сообщение объединено с предыдущим 2 мар 2022 https://metanit.com/sharp/tutorial/11.1.php Почитай по ссылке, как многопоточность сделать
Изучай многопоточность https://docs.microsoft.com/ru-ru/dotnet/standard/threading/threads-and-threading https://habr.com/ru/post/126495/
wDude, Пробовал сделать так: public static Thread threadForUSBSercher = new Thread(USBSearcher); //а внутри метода threadForUSBSercher.IsBackGround = true; threadForUSBSercher.Start() Код public static Thread threadForUSBSercher = new Thread(USBSearcher); //а внутри метода threadForUSBSercher.IsBackGround = true; threadForUSBSercher.Start() Но оно упарывается, когда пытается запустить метод второй раз.
@aChanCode, теперь, когда убрал threadForUSBSercher.Start() работает, но не даёт работать другому методу. Тут уже не знаю, что делать.
Изменить имя процессов и твой код отпадает. Мы все знаем что ты пишешь)) --- Сообщение объединено с предыдущим 2 мар 2022 По коду всё лишнее, когда можно проще сделать. Повесить WndProc на отлов флешек и запуск процессов и их отлавливать, в момент когда поймал, выполнить метод и никакие циклы с while (true) не нужны