9

I need to use callback function to do some post procesing tasks when the function started with the Dispatcher.BeginInvoke finishes. However i could not find any parameter in Dispatcher.BeginInvoke to accept a callback. Is it possible to give a callback function to Dispatcher.BeginInvoke?

abatishchev
  • 98,240
  • 88
  • 296
  • 433
logeeks
  • 4,849
  • 15
  • 62
  • 93

1 Answers1

13

The DispatcherOperation object returned by BeginInvoke has a Completed event on it. Subscribe to that to perform operations upon completion:

var dispatcherOp = Dispatcher.BeginInvoke( /* your method here */);
dispatcherOp.Completed += (s, e) => { /* callback code here */ };

There's a chance the operation will complete before you subscribe, so you can test the Status property for completion after as well:

if (dispatcherOp.Status == DispatcherOperationStatus.Completed) { ... }

It's possible for the operation to be aborted as well, so handling/testing for Aborted may also be appropriate.

dlev
  • 48,024
  • 5
  • 125
  • 132