Как остановить, а затем возобновить поток с циклом while внутри? - C#
Формулировка задачи:
Помогите решить задачу!
Есть поток
есть метод
Вопрос!
Как Приостановить работу потока так, чтобы инструкции в теле цикла while не исполнялись, а затем через некоторое время возобновить работу?
Thread thread = new Thread(new ThreadCallBack(RecivePackets)); thread.Start();
void RecivePackets() { // здесь цикл while while(true) { //что то делается, например, ожидает пакеты данных от сервера } }
Решение задачи: «Как остановить, а затем возобновить поток с циклом 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д