The IDE has many asynchronous sources (assembly, MCP, LSP, etc.). Spreading `Post`/`Invoke` throughout the code complicates maintenance and increases the risk of accessing the UI from a source other than the UI thread.
ViewModel and UI updates after running in the background whenever possible go through **one consistent point** of marshaling: **`IUiScheduler`** and **`UiScheduler.Default`** (implementation on `Dispatcher.UIThread`), rather than arbitrary dispatcher calls throughout the code.