如何给Dispatcher.BeginInvoke提供回调函数

log*_*eks 9 .net c# wpf callback dispatcher

当函数以Dispatcher.BeginInvoke启动完成时,我需要使用回调函数来执行一些后处理任务.但是我在Dispatcher.BeginInvoke中找不到任何参数来接受回调.可以给Dispatcher.BeginInvoke提供一个回调函数吗?

dle*_*lev 12

DispatcherOperation返回的对象上BeginInvoke有一个Completed事件.订阅完成后执行操作:

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

在您订阅之前,操作有可能完成,因此您也可以在Status完成后测试该属性:

if (dispatcherOp.Status == DispatcherOperationStatus.Completed) { ... }
Run Code Online (Sandbox Code Playgroud)

操作也可能中止,因此处理/测试Aborted也可能是合适的.

  • 请注意,这在Windows Phone 7,8和Silverlight上不可用:( (3认同)