有没有办法确保第二个语句在第一个语句之后执行?
DispatcherObjectInvoker.Invoke(_layouts,
() =>
_layouts.RaiseEvent(new LayoutEventArgs(
MainScreen.ChangedLayoutEvent,
this)));
DispatcherObjectInvoker.Invoke(_layouts, Grid.Refresh);
我正在访问第一个语句中触及的Grid。网格刷新仅在大约80%的情况下起作用。我在这里显然有竞争条件。
答案 0 :(得分:3)
为什么不让它们成为同一行动的一部分?
DispatcherObjectInvoker.Invoke(_layouts, () =>
{
_layouts.RaiseEvent(new LayoutEventArgs(MainScreen.ChangedLayoutEvent,
this));
Grid.Refresh();
});
答案 1 :(得分:0)
不确定DispatcherObjectInvoker
是什么,但我认为它是Dispatcher
或其他东西的包装。
如果是,如果您拨打Invoke()
,则是阻止通话。因此,您的第二次通话将保证在您第一次通话后。
但是,如果您的意图是进行异步调用,则应使用BeginInvoke
。 DispatcherPriority
参数有助于确保对相同优先级的调用具有相同的顺序。因此,如果_layouts
引用DispatcherPriority.Loaded
优先级(或任何其他优先级),则保证呼叫的顺序相同。