2011-11-16 76 views
0

有沒有辦法確保第二個語句在第一個語句之後執行?有沒有辦法確保一個方法在使用DispatcherObjectInvoker.Invoke時執行另一個方法

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

DispatcherObjectInvoker.Invoke(_layouts, Grid.Refresh); 

我訪問了在第一語句涉及的網格。網格的刷新僅在約80%的情況下工作。我顯然在這裏有比賽條件。

+1

什麼是DispatcherObjectInvoker?它只是「調度員」嗎? – BrokenGlass

回答

3

爲什麼不讓他們成爲同一行動的一部分?

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

不知道什麼是DispatcherObjectInvoker是,但我會假設它是爲Dispatcher或東西的包裝。

如果是,如果您撥打Invoke(),這是一個阻塞呼叫。所以你的第二個電話肯定會在第一個電話之後。

但是,如果你的意圖是讓這些是異步調用,你應該使用BeginInvokeDispatcherPriority參數有助於確保對相同優先級進行的調用具有相同的順序。因此,如果_layouts引用DispatcherPriority.Loaded優先級(或任何其他優先級),則保證呼叫的順序相同。

檢查MSDNdocumentation

相關問題