Waking a thread in C#
I am looking for a simple way to put a thread to sleep and to wake it. The thread runs in background in an infinite loop and sometimes does some work, sometimes just runs through. I have found out that there is no corresponding Wait() to the Sleep() and waking a thread with Interrupt() causes an exception. Apparently a sleeping thread is not meant to be disturbed.  
Since I know when the work appears it seems a good idea to tell the thread, instead of having it check over and over again.

How can a thread be put to a 'lighter sleep' to be able to wake up alone each second or at a command from other thread? 


    //Thread to put to sleep and wake (thread1)
    while (true)
    {
        if (thereIsWork)
        { DoWork(); }
        //put thread to sleep in a way that other threads can wake it, and it wakes alone after some time (eg. 1000 ms)
        // Thread.Sleep(1000); //nice, but not working as desired
    }

-

    //Other thread:

    thereIsWork = true;
    //thread1.Wake(); //Not existing
       
Waking a thread in C#
===

I am looking for a simple way to put a thread to sleep and to wake it. The thread runs in background in an infinite loop and sometimes does some work, sometimes just runs through. I have found out that there is no corresponding Wait() to the Sleep() and waking a thread with Interrupt() causes an exception. Apparently a sleeping thread is not meant to be disturbed.  
Since I know when the work appears it seems a good idea to tell the thread, instead of having it check over and over again.

How can a thread be put to a 'lighter sleep' to be able to wake up alone each second or at a command from other thread? 


    //Thread to put to sleep and wake (thread1)
    while (true)
    {
        if (thereIsWork)
        { DoWork(); }
        //put thread to sleep in a way that other threads can wake it, and it wakes alone after some time (eg. 1000 ms)
        // Thread.Sleep(1000); //nice, but not working as desired
    }

-

    //Other thread:

    thereIsWork = true;
    //thread1.Wake(); //Not existing
       