Use COM Servers Marked with Apartment Model Threading

jSegue contains support code to help you create and use COM Apartment Model Threads. COM interfaces that are marked for Apartment Model Threading should only be called from the thread they are created on. Futhermore, the Apartment Model Thread must pump Windows messages.

Use tlb2java with the -check_apartment option to generate Java bindings to a COM component that is marked as using Apartment Model Threading. tlb2java will automatically generate checks that will throw an exception if you call a method on an interface created on a different thread. Additionally, the IUnknown.finalize method will use the Apartment Model Thread to call Release.

Use OleThread to create a thread that is a COM Apartment Model Thread. OleThread creates a new thread and sets up the necessary Windows message pump.

OleThread t = new OleThread("A Apartment Thread");
t.startAndInit();
Once the thread is started you can execute code on that thread by using ole_thread.invokeLater or ole_thread.invokeAndWait. These are similar to java.awt.EventQueue.invokeLater and java.awt.EventQueue.invokeAndWait.
try {
    t.invokeAndWait(new Runnable() {
        public void run() {
            // this block of code runs on the "A Apartment Thread"
            // ...
        }
    });
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

$Id: apartment.html 3769 2007-06-08 19:06:43Z hastings $