Now unfortunately due to the fact that WinCE Usb Device Arrival / Removal exposes itself via WindowsMessages I have to ensure that a certain (non-UI) component is not created on a background thread. I would like to assert this via an exception but am lacking the code for the assertion.
This component creates a MessageWindow* and uses it to receive usb arrived/removed messages. The issue is if someone creates this component on a background thread (not necessarily; IsBackground = true) when the thread exits the window will be destroyed.
Any ideas?
*as an aside I still don’t know why Form doesn’t inherit from this class
Update
I think my version 1 wasn’t very clear. So this is v2.
When you create a MessageWindow or a Form for that matter on a thread, when that thread exits the Window/Form is destroyed.
My component is creating a “hidden” message window to intercept some important events, ergo I do not wish for it to be destroyed. Therefore I must somehow ensure that the code that creates the form is running on the “Main UI” thread.
If possible i’d like to avoid passing down a reference to the “main” form to this component as it is (architecturally speaking) supposed to be miles away from the UI.
Update
Moving logging question to a separate Q.
Ok, I understand that you don’t want for your component to “know” about the main window — makes sense.
How about this: How about if you make sure that you always instance your component on the main thread? You component will create it’s listener window on the constructor’s thread.
If you do that, then you just need to make sure that you call the constructor from the main thread. I’m making some assumptions about your code, but I’m guessing that you must have some class in your architecture that knows about both the UI and your component. Create your component there, using a callback, and the main form’s InvokeRequired/Invoke methods.