Several ways are possible. Since you're new to C # and probably closely related to the user interface, I suggest you use the BackgroundWorker class.
http://msdn.microsoft.com/en-us/library/cc221403 (v = vs .95) .aspx
You can pass your arguments using the DoWorkEventArgs from the DoWork event. Also with this approach and without shared objects (via streams) you can avoid using blocking or synchronization
I think this may be the best solution for you, but there are alternatives. You can use an asynchronous programming model (APM) or even Thread / ThreadPool or a parallel task library.
Should I just use a lock protected state variable and poll it around my video stream each time; are there any other recommendations?
If you have a general condition, such as a video stream, you should use stream synchronization. So the answer is yes, you should use some protected variable, you can avoid blocking with just volatile, but consider using other synchronization primitives. Since using volatile just ensures that you read / write the most actual value, but that does not interfere with reading / writing other threads.
Some links to choose whether to use a lock (other primitives) or just unstable:
Do I need to block or mark as volatile when accessing a simple boolean flag in C #?
Volatile against blocking against blocking
source share