static void Main(string[] args) { //1. Определите и выведите на консоль/в файл все запущенные процессы:id, имя, приоритет, //время запуска, текущее состояние, сколько всего времени использовал процессор и т.д. using (StreamWriter sw = new StreamWriter("processes.txt")) { Process[] allProcesses = Process.GetProcesses(); //получение всех процессов foreach (Process p in allProcesses) //при запуске приложения ОС создает для него процесс, { //которому выделяется определенное адр пр-во в памяти sw.WriteLine("Имя компьютера: " + p.MachineName); sw.WriteLine("id: " + p.Id); sw.WriteLine("Имя: " + p.ProcessName); sw.WriteLine("Приоритет: " + p.BasePriority); //sw.WriteLine("Время запуска: " + p.StartTime); sw.WriteLine("Ответ пользовательского интерфейса: " + p.Responding); sw.WriteLine("Объём памяти: " + p.WorkingSet64); sw.WriteLine("Общее время: " + p.TotalProcessorTime); sw.WriteLine(); } } //2. Исследуйте текущий домен вашего приложения: имя, детали конфигурации, все сборки, загруженные в домен. //При запуске приложения, написанного на C#, операционная система создает процесс, а среда CLR создает внутри этого процесса //логический контейнер, который называется доменом приложения и внутри которого работает запущенное приложение. AppDomain domain = AppDomain.CurrentDomain; Console.WriteLine("Текущий домен"); Console.WriteLine("Имя: " + domain.FriendlyName); Console.WriteLine("Детали конфигурации: " + domain.SetupInformation); Console.WriteLine("Сборки, загруженные в домен:"); Assembly[] assemblies = domain.GetAssemblies(); foreach (Assembly a in assemblies) { Console.WriteLine(a.GetName().Name); } //Создайте новый домен. AppDomain newDomain = AppDomain.CreateDomain("New"); newDomain.Load(new AssemblyName("ConsoleApp1")); //Загрузите туда сборку. Console.WriteLine("Имя нового домена: " + newDomain.FriendlyName + "\nСборки нового домена:"); foreach (Assembly a in newDomain.GetAssemblies()) { Console.WriteLine(a.GetName().Name); } //Выгрузите домен. AppDomain.Unload(newDomain); //Console.WriteLine("\nPress any key\n"); //Console.ReadKey(); //3. Создайте в отдельном потоке следующую задачу расчета (можно сделать sleep для задержки) //и записи в файл и на консоль простых чисел от 1 до n(задает пользователь). //Вызовите методы управления потоком(запуск, приостановка, возобновление и тд.) //Во время выполнения выведите информацию о статусе потока, имени, приоритете. Console.WriteLine("\nПоток"); //поток - используемый внутри процесса путь выполнения Thread thread = new Thread(ToWriteNum); //процесс содержит мин один поток - главный thread.Start(); //из главного - вторичные thread.Name = "MyThread"; Thread.Sleep(1000); thread.Suspend(); Console.WriteLine("Имя: " + thread.Name); Thread.Sleep(100); Console.WriteLine("Статус: " + thread.ThreadState); Thread.Sleep(100); Console.WriteLine("Приоритет: " + thread.Priority); Thread.Sleep(1000); thread.Resume(); Thread.Sleep(3000); //4. Создайте два потока.Первый выводит четные числа, второй нечетные до n и //записывают их в общий файл и на консоль.Скорость расчета чисел у потоков – разная. //a.Поменяйте приоритет одного из потоков. //b.Используя средства синхронизации организуйте работу потоков, таким образом, чтобы //i. выводились сначала четные, потом нечетные числа Console.WriteLine("Сначала чётные"); TwoThreads.Consistently(); Thread.Sleep(4000); Console.WriteLine("\nНажмите кнопку\n"); Console.ReadKey(); //ii. последовательно выводились одно четное, другое нечетное. Console.WriteLine("Чередуясь:"); TwoThreads.OneByOne(); Thread.Sleep(7000); Console.WriteLine("\nНажмите кнопку\n"); Console.ReadKey(); //5. Придумайте и реализуйте повторяющуюся задачу на основе класса Timer TimerCallback tm = new TimerCallback(Count); //метод обратного вызова //таймер - запускает опред действия по истечению некоторого периода времени Timer timer = new Timer(tm, null, 500, 1000); //метод, объект для передачи в метод, мс через кот таймер запускается, интервал между вызовами метода Thread.Sleep(5000); Console.WriteLine("Времени прошло..."); timer.Dispose(); Process music = Process.Start("clock.mp3"); Console.ReadKey(); void Count(object obj) { Console.WriteLine($"Сейчас {DateTime.Now.Hour}:{DateTime.Now.Minute}:{DateTime.Now.Second}"); } }