【发布时间】:2023-03-30 19:31:01
【问题描述】:
我想通过执行以下操作从我的MainWindow's ViewModel 打开一个新的WPF window,延迟 2 秒:
await Task.Delay(2000).ContinueWith(_ =>
{
Restart wndRestart = new Restart();
wndRestart.Show();
}
);
可悲的是,我不断收到:System.InvalidOperationException: 'The calling thread must be STA, because many UI components require this.'
我其实查了this,但是我重构了一个方法后还是无法使用[STAThread]。
【问题讨论】:
-
投票重新打开,因为链接的答案并没有真正解决 this 特定问题和所需的解决方案/解决方法。
-
“链接的答案并没有真正解决这个特定问题”——当然可以。或者至少,它解决了这个含糊不清的问题的一个例子。事实是,问题中没有足够的细节来知道出了什么问题。如果发布的代码首先在 UI 线程中执行,则根本不会发生异常。所以修复它的一种方法是在 UI 线程中执行它,每个副本。还有许多其他情况可能会导致异常,但在问题中没有任何证据适用。
-
不要使用
Task.ContinueWith。只需在await之后继续您的代码。 -
仅澄清这一点:
Window只能在 UI 线程上创建。