Как остановить, а затем возобновить поток с циклом 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();
}
}
}