Как остановить, а затем возобновить поток с циклом while внутри? - C#

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачу! Есть поток
Thread thread = new Thread(new ThreadCallBack(RecivePackets));
thread.Start();
есть метод
void RecivePackets() {
// здесь цикл while
   while(true) {
     //что то делается, например, ожидает пакеты данных от сервера
  }
}
Вопрос! Как Приостановить работу потока так, чтобы инструкции в теле цикла while не исполнялись, а затем через некоторое время возобновить работу?

Решение задачи: «Как остановить, а затем возобновить поток с циклом while внутри?»

textual
Листинг программы
using System;
using System.Timers;
using System.Threading;
 
namespace StopThread {
    class MainClass {
        static Thread thread;
        static ManualResetEvent manualEvent;
        
        static void Main(string[] args) {
            thread = new Thread(new ParameterizedThreadStart(Foo));
            manualEvent = new ManualResetEvent(false);            
            thread.Start(manualEvent);
            
            System.Timers.Timer timerStart = new System.Timers.Timer();
            timerStart.Elapsed += new ElapsedEventHandler(StartThread);
            timerStart.AutoReset = false;
            timerStart.Interval = 5*1000;
            
            System.Timers.Timer timerStop = new System.Timers.Timer();
            timerStop.Elapsed += new ElapsedEventHandler(StopThread);
            timerStop.AutoReset = false;
            timerStop.Interval = 10*1000;
            
            System.Timers.Timer timerStartElse = new System.Timers.Timer();
            timerStartElse.Elapsed += new ElapsedEventHandler(StartThread);
            timerStartElse.AutoReset = false;
            timerStartElse.Interval = 15*1000;
            
            timerStart.Start();
            timerStop.Start();
            timerStartElse.Start();
        }
 
        static void Foo(object manualEvent) {           
            ManualResetEvent ev=(ManualResetEvent)manualEvent;
            while(ev.WaitOne()) {
                System.Console.WriteLine("work");
            }
        }
        
        static void StartThread(object source, ElapsedEventArgs e) {
            //resume thread
            Console.WriteLine("start thread");
            manualEvent.Set();
        }
        
        static void StopThread(object source, ElapsedEventArgs e) {
            //pause thread
            Console.WriteLine("stop thread");
            manualEvent.Reset();
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы