@mjn: I am not allowed to comment on your remark in the previous answer, so I created a new answer: calling CoInitialize from the constructor is one of the typical error programmers.
The constructor is executed in the context of another thread, but you need to initialize COM in the current thread (when the thread procedure is executed, i.e. as part of the Execute method), see
source share