Вопрос Приостановить метод в c#

Пользователь
Статус
Оффлайн
Регистрация
14 Апр 2020
Сообщения
173
Реакции[?]
40
Поинты[?]
0
Каким образом можно приостановить метод (проще говоря - поставить на паузу) при нажатии кнопки в c#, с возможностью возобновить работу, с точки где его он бЬІл остановлен?
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Первое, что пришло в голову - использование 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);
            }
        }
    }
}
 
Пользователь
Статус
Оффлайн
Регистрация
14 Апр 2020
Сообщения
173
Реакции[?]
40
Поинты[?]
0
Первое, что пришло в голову - использование 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);
            }
        }
    }
}
Как всегда, на уровне. Спасибо, выручалка))
 
Сверху Снизу