How can I make a background worker thread set to Single Thread Apartment?

前端 未结 5 949
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 07:34

I am creating an automated test running application. In this part of the application, I am working on a polling server. It works by constantly polling the web server to de

5条回答
  •  旧时难觅i
    2020-11-27 07:56

    This is not possible, BGW uses a threadpool thread. TP threads are always MTA, it cannot be changed. You will have to use a regular Thread, call SetApartmentState() before you start it. This thread also should pump a message loop, call Application.Run().

    Maybe you ought to consider calling this code from the UI thread. Because in all likelihood, the COM server is running its methods on the UI thread anyway. Marshaling calls from a worker thread to the STA thread that created the COM server is automatic, COM takes care of it.

    Or take the bull by the horns and marshal yourself. You can create your own STA thread to give the server a happy home. You'll find code in this post, be sure to create the COM object in your Initialize() override.

提交回复
热议问题