We are using a combination of C# and Managed C++ in .NET 2.0
Our program has a couple of threads. The main thread is controlling the GUI primarily. A second thread runs a very fast running loop that obtains data and controls a piece of hardware (or simulates such). When the second thread gets an update, we have it use Invoke to update the GUI. However, under particularly system intensive conditions, or when the user does something like dragging the window, the second thread will stop when it calls Invoke. We have tried using BeginInvoke as an alternative, but that second thread just runs too fast and too many BeginInvokes get queued and we start eating up memory of having the hardware and the GUI lose sync.
Is there some sort of hidden timeout for Invoke that is causing it to fail when a window is dragged or we are using a lot of resources (at which point the main thread seemes to be occupied) Does anyone know why this is happening or of a workaround

Invoke freezes and BeginInvoke queues up too many messages.
Malae
If you're seeing it stuck on Invoke and the CPU is at 0, you might want to make sure you're not in a deadlock situation.
Some other thoughts:
If you dont want the second thread to stop while updating the UI, then BeginInvoke is the better plan.
If you want to block the second thread for a period of time, then you can use the IAsyncResult that's passed back and call WaitOne() with a timeout on the AsyncWaitHandle.
You might have to play around with the number of results you're returning at once to the UI thread so it can keep up with your second thread.
Some other links of help:
http://weblogs.asp.net/justin_rogers/articles/126345.aspx
http://blogs.msdn.com/benwu/archive/2005/05/19/420148.aspx