c# - Wait for COM Event to complete -


how block ui thread while waiting com event complete. subscribe update event of com signals event has completed.

myrdata.onupdate += onupdate; 

i not own com code , cannot make changes it.

i tried autoresetevent blocks ui thread , dont recieve updates com.

my answer similar @ericbrown's one, there 1 different point.

creating nested message loop msgwaitformultipleobjectsex may lead code reentrancy on same thread (via window message dispatched inner peekmessage/translatemessage/dispatchmessage pattern). @ worst scenario, may end calling same com object method before previous call has returned.

i first try using cowaitformultiplehandles cowait_dispatch_calls (but without cowait_dispatch_window_messages). in case com object provided out-of-proc server, should work. otherwise, should consider putting reentrancy checks in place.

i have related question code showing how done c# (i had use cowait_dispatch_window_messages there, otherwise event after wasn't getting fired).

[update] ideally, should use async/await pattern things , wrap event task (e.g. here's how). understand, not feasible re-factor existing code use approach. however, if pending operation takes considerable time complete, more user-friendly way wait completion event might show modal dialog nice "please wait..." message (as discussed here in comments). you'd close dialog event handler. in fact, afaik, endorsed way winforms app enter nested message loop.

[update] eric pointed out in comments, cowait_dispatch_window_messages indeeded required sta thread. apparently, cowait_dispatch_calls intended new little-known asta model , has no meaning in other apartment types.

in case out-of-proc com servers, .net event handlers called free-threaded objects regardless of waiting thread's apartment model (in experience, it's never same sta thread on out-of-proc object created). thus, waiting waithandle.waitone (no pumping) should sufficient. however, if event handler accesses state data besides waithandle, proper synchronization required (with locks etc).


Comments

Popular posts from this blog

design - Custom Styling Qt Quick Controls -

Unable to remove the www from url on https using .htaccess -