当使用DispatcherObjectInvoker.Invoke时,是否有一种方法可以确保一个方法在另一个方法之后执行
本文关键字:方法 确保 执行 之后 另一个 一个 Invoke DispatcherObjectInvoker 是否 一种 | 更新日期: 2023-09-27 18:14:59
是否有办法确保第二个语句在第一个语句之后执行?
DispatcherObjectInvoker.Invoke(_layouts,
() =>
_layouts.RaiseEvent(new LayoutEventArgs(
MainScreen.ChangedLayoutEvent,
this)));
DispatcherObjectInvoker.Invoke(_layouts, Grid.Refresh);
我正在访问第一个语句中触及的网格。网格的刷新仅在大约80%的情况下有效。这里显然有一个竞态条件
为什么不让它们都成为同一个动作的一部分呢?
DispatcherObjectInvoker.Invoke(_layouts, () =>
{
_layouts.RaiseEvent(new LayoutEventArgs(MainScreen.ChangedLayoutEvent,
this));
Grid.Refresh();
});
不确定DispatcherObjectInvoker
是什么,但我假设它是Dispatcher
或其他东西的包装器。
如果是,则呼叫Invoke()
为阻塞呼叫。所以你的第二个电话肯定在你第一个电话之后。
然而,如果你的意图是异步调用,你应该使用BeginInvoke
。DispatcherPriority
参数有助于确保对相同优先级级别的调用以相同的顺序进行。因此,如果_layouts
引用DispatcherPriority.Loaded
优先级(或任何其他优先级),则保证调用以相同的顺序进行。
查看MSDN文档