I need to have a thread signal another if the user wishes to interrupt execution, however I’m unsure about how to implement the signaling/signal-checking mechanism. I wouldn’t like to have a singleton in my project (like a global bool), but is there an alternative?
In this thread people suggest proper structures for that in C++, but I don’t know about anything similar in .NET. Could somebody please shed some light?
Try out BackgroundWorker. It supports progress updates and cancellation of a running task.
If you want one thread to wait until another thread has finished doing its thing, then Monitor.Wait and Monitor.Pulse are good, as is ManualResetEvent. However, these are not really of any use for cancelling a running task.
If you want to write your own cancellation code, you could just have a field somewhere which both threads have access to. Mark it volatile, e.g.:
Have the main thread set it to true, and have the worker thread check it periodically and set it to false when it has finished.
This is not really comparable to having a ‘global variable’, as you can still limit the scope of the semaphore variable to be private to a class.