Anicodem A Пользователь Статус Оффлайн Регистрация 14 Апр 2020 Сообщения 173 Реакции[?] 40 Поинты[?] 0 3 Июн 2022 Автор темы #1 Каким образом можно приостановить метод (проще говоря - поставить на паузу) при нажатии кнопки в c#, с возможностью возобновить работу, с точки где его он бЬІл остановлен?
Каким образом можно приостановить метод (проще говоря - поставить на паузу) при нажатии кнопки в c#, с возможностью возобновить работу, с точки где его он бЬІл остановлен?
Irval Олдфаг Статус Оффлайн Регистрация 18 Фев 2019 Сообщения 2,826 Реакции[?] 1,853 Поинты[?] 24K 3 Июн 2022 #2 Первое, что пришло в голову - использование ManualResetEvent: C#: using System; using System.Threading; namespace ConsoleApp1 { class Program { static ManualResetEvent _event = new ManualResetEvent(false); static void Main(string[] args) { new Thread(ThreadFunc).Start(); _event.Set(); while (true) { string command = Console.ReadLine(); if (command == "suspend") { _event.Reset(); Console.WriteLine("Suspended!"); } else if (command == "resume") { _event.Set(); Console.WriteLine("Resumed!"); } else Console.WriteLine("Unknown command!"); } } static void ThreadFunc() { while (true) { _event.WaitOne(); Console.WriteLine(1); Thread.Sleep(3000); _event.WaitOne(); Console.WriteLine(2); Thread.Sleep(3000); } } } }
Первое, что пришло в голову - использование ManualResetEvent: C#: using System; using System.Threading; namespace ConsoleApp1 { class Program { static ManualResetEvent _event = new ManualResetEvent(false); static void Main(string[] args) { new Thread(ThreadFunc).Start(); _event.Set(); while (true) { string command = Console.ReadLine(); if (command == "suspend") { _event.Reset(); Console.WriteLine("Suspended!"); } else if (command == "resume") { _event.Set(); Console.WriteLine("Resumed!"); } else Console.WriteLine("Unknown command!"); } } static void ThreadFunc() { while (true) { _event.WaitOne(); Console.WriteLine(1); Thread.Sleep(3000); _event.WaitOne(); Console.WriteLine(2); Thread.Sleep(3000); } } } }
Anicodem A Пользователь Статус Оффлайн Регистрация 14 Апр 2020 Сообщения 173 Реакции[?] 40 Поинты[?] 0 3 Июн 2022 Автор темы #3 Irval написал(а): Первое, что пришло в голову - использование ManualResetEvent: C#: using System; using System.Threading; namespace ConsoleApp1 { class Program { static ManualResetEvent _event = new ManualResetEvent(false); static void Main(string[] args) { new Thread(ThreadFunc).Start(); _event.Set(); while (true) { string command = Console.ReadLine(); if (command == "suspend") { _event.Reset(); Console.WriteLine("Suspended!"); } else if (command == "resume") { _event.Set(); Console.WriteLine("Resumed!"); } else Console.WriteLine("Unknown command!"); } } static void ThreadFunc() { while (true) { _event.WaitOne(); Console.WriteLine(1); Thread.Sleep(3000); _event.WaitOne(); Console.WriteLine(2); Thread.Sleep(3000); } } } } Нажмите для раскрытия... Как всегда, на уровне. Спасибо, выручалка))
Irval написал(а): Первое, что пришло в голову - использование ManualResetEvent: C#: using System; using System.Threading; namespace ConsoleApp1 { class Program { static ManualResetEvent _event = new ManualResetEvent(false); static void Main(string[] args) { new Thread(ThreadFunc).Start(); _event.Set(); while (true) { string command = Console.ReadLine(); if (command == "suspend") { _event.Reset(); Console.WriteLine("Suspended!"); } else if (command == "resume") { _event.Set(); Console.WriteLine("Resumed!"); } else Console.WriteLine("Unknown command!"); } } static void ThreadFunc() { while (true) { _event.WaitOne(); Console.WriteLine(1); Thread.Sleep(3000); _event.WaitOne(); Console.WriteLine(2); Thread.Sleep(3000); } } } } Нажмите для раскрытия... Как всегда, на уровне. Спасибо, выручалка))