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

  • Автор темы Автор темы Anicodem
  • Дата начала Дата начала
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
14 Апр 2020
Сообщения
176
Реакции
40
Каким образом можно приостановить метод (проще говоря - поставить на паузу) при нажатии кнопки в c#, с возможностью возобновить работу, с точки где его он бЬІл остановлен?
 
Первое, что пришло в голову - использование ManualResetEvent:
C#:
Expand Collapse Copy
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#:
Expand Collapse Copy
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);
            }
        }
    }
}
Как всегда, на уровне. Спасибо, выручалка))
 
Назад
Сверху Снизу