wpf Dispatcher.Invoke System.InvalidOperationException:“调度程序处理已暂停,但仍在处理消息。”

private void TriggerError_Click(object sender, RoutedEventArgs e)
{
   // 1. 挂起 Dispatcher 的消息处理
   using (Dispatcher.DisableProcessing())
   {
      try
      {
         // 2. 关键:必须指定一个优先级(如 Normal 或 Background)
         // 默认不带优先级的 Invoke 会被优化为直接执行(Send),不会触发 PushFrame。
         // 指定优先级后,Invoke 发现不能立即执行,会尝试 PushFrame 等待,
         // 此时因为处于 DisableProcessing 块中,必然抛出异常。
         Dispatcher.Invoke(() =>
         {
            // 这段代码永远不会被执行
            Debug.WriteLine("Executing...");
         }, DispatcherPriority.Normal);
      }
      catch (InvalidOperationException ex)
      {
         // 你会在这里看到:暂停调度程序处理时,无法执行此操作。
         MessageBox.Show($"复现成功!\n\n错误信息:{ex.Message}\n堆栈:{ex.StackTrace}");
      }
   }
}
posted @ 2026-02-13 20:07  trykle  阅读(1)  评论(0)    收藏  举报