I'm certain that MFC does not marshal COM interfaces for you automatically. The Measurement Studio C++ classes for the user interface controls (e.g. CNiGraph) add this functionality explicitly. Unfortunately, there are no such C++ classes for the IMAQ controls.
I was not able to reproduce the exception you get. I tried a couple of different things, including causing the the acquisition to happen at different times.
After thinking about the problem some more, I realized that you would not necessarily get an error by calling into the interface from the wrong thread. The COM server is just a DLL loaded in the process, so there is nothing p
reventing the call from happening. However, the control implementation is not thread safe. Being an apartment threaded COM server, it expects to always be called on the same thread. As you probably know, calling code that is not thread safe from multiple threads can result in errors in some cases and not in others, depending on the timing of the thread accesses and what shared data is being accessed. If this is what is going on, it could explain why moving code around changes whether the error occurs and why you see the exception but I don't.
I am attaching updated versions of your trigger and view classes. These updated versions use CoMarshalInterThreadInterfaceInStream to properly marshal the COM interface for the signals to your worker thread. I included some comments, marked by drohacek, around the code that I modified. Could you plug this in and see if you still see the problem on your machine?