|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Question: Using STA component in threadpool via delegate.BeginInvoI have a couple of questions relating to STA component that has been bugging me. If I have a STA component and I want to call one of its methods, which takes some times to complete and so I want to run it on a threadpool by using delegate.BeginInvoke(). Questions: 1) What kind of Apartment are the threads in the threadpool? 2) In legacy COM programming, I need to manually marshal the COM interface pointer to the other Apartment. If I simply pass the interface in .Net as a parameter when I call the delegate.BeginInvoke(), will .Net marshals the interface for me? If not, how do I to do this correctly? Thanks. Leon
Show quote
"Leon" <newsgroup01.3.mailcenter***@neverbox.com> wrote in message Generally speaking, they're not in any apartment. I would assume, however, news:CD39D030-DFEF-4C7B-B651-3781B3DD27FE@microsoft.com... > Hi, > > I have a couple of questions relating to STA component that has been > bugging > me. > > If I have a STA component and I want to call one of its methods, which > takes > some times to complete and so I want to run it on a threadpool by using > delegate.BeginInvoke(). > > Questions: > 1) What kind of Apartment are the threads in the threadpool? that they'll automatically enter the MTA if necessary. That doesn't help with your STA component though. > 2) In legacy COM programming, I need to manually marshal the COM interface I don't think so. Even if it did, it wouldn't do what you want anyway, > pointer to the other Apartment. > > If I simply pass the interface in .Net as a parameter when I call the > delegate.BeginInvoke(), will .Net marshals the interface for me? since the marshalled interface pointer would simply marshall the call back into the thread that created the component in the first place - that's the only thread a STA component can run on. If you have a STA component, you really don't have any practical alternative to simply calling all of it's member functions on your UI thread. -cd |
|||||||||||||||||||||||