有没有办法确保一个方法在使用DispatcherObjectInvoker.Invoke时执行另一个方法

时间:2011-11-16 22:59:11

标签: c# wpf

有没有办法确保第二个语句在第一个语句之后执行?

DispatcherObjectInvoker.Invoke(_layouts,
    () =>
        _layouts.RaiseEvent(new LayoutEventArgs(
            MainScreen.ChangedLayoutEvent,
            this)));

DispatcherObjectInvoker.Invoke(_layouts, Grid.Refresh);

我正在访问第一个语句中触及的Grid。网格刷新仅在大约80%的情况下起作用。我在这里显然有竞争条件。

2 个答案:

答案 0 :(得分:3)

为什么不让它们成为同一行动的一部分?

DispatcherObjectInvoker.Invoke(_layouts, () => 
{
     _layouts.RaiseEvent(new LayoutEventArgs(MainScreen.ChangedLayoutEvent,
                                             this));
     Grid.Refresh();
 });

答案 1 :(得分:0)

不确定DispatcherObjectInvoker是什么,但我认为它是Dispatcher或其他东西的包装。

如果是,如果您拨打Invoke(),则是阻止通话。因此,您的第二次通话将保证在您第一次通话后。

但是,如果您的意图是进行异步调用,则应使用BeginInvokeDispatcherPriority参数有助于确保对相同优先级的调用具有相同的顺序。因此,如果_layouts引用DispatcherPriority.Loaded优先级(或任何其他优先级),则保证呼叫的顺序相同。

检查MSDN documentation