gpt4 book ai didi

c# - InvalidOperationException:调度程序处理已暂停,但消息仍在处理中

转载 作者:太空狗 更新时间:2023-10-30 01:02:08 30 4
gpt4 key购买 nike

我们遇到了与此异常有关的多个问题,但我找不到有关问题真正原因的技术文档、此错误的所有可能来源以及我们应该避免什么以避免出现异常。

我已阅读以下内容:

The dispatcher processing is suspended to avoid reentrancy problems when updating the visual tree.

但我不确定“更新可视化树”的含义以及导致将消息发送到 Dispatcher 并重现问题的原因。

以下示例代码重现了该问题:

XAML

<Window x:Class="SuspendedPOF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525">
<StackPanel>
<Button Content="1" x:Name="Button1" IsVisibleChanged="Button1_OnIsVisibleChanged" />
</StackPanel>
</Window>

C#代码

using System.Windows;

namespace SuspendedPOF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button1_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("Hello");
}
}
}

MessageBox 调用并不是唯一引发此异常的调用,像 Focus 这样的调用有时也会有问题。

任何帮助都会很棒。

最佳答案

重点是您可能试图在事件处理程序中更改按钮的视觉状态,该事件处理程序管理其视觉变化(即其可见性)。这可能会导致无限循环(如您所见,“重入问题”),这也是您获得 InvalidOperationException 的原因。

为避免此问题,您必须使用 Dispatcher 延迟打开 MessageBox .然后在 Button1_OnIsVisibleChanged 方法中,使用以下代码:

Dispatcher.BeginInvoke(new Action(() => System.Windows.MessageBox.Show("Hello")),
System.Windows.Threading.DispatcherPriority.Normal);

而不是直接调用 MessageBox Show 静态方法。

关于c# - InvalidOperationException:调度程序处理已暂停,但消息仍在处理中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172613/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com