![](/img/trans.png)
[英]InvalidOperationException: dispatcher processing is suspended on ImageOffsetProperty
[英]InvalidOperationException: dispatcher processing has been suspended, but messages are still being processed
我們遇到了這個例外的多個問題,但我找不到關於問題真正原因的技術文檔,這個錯誤的所有可能來源以及我們應該避免什么來避免異常。
我看過以下內容:
暫停調度程序處理以避免在更新可視樹時出現重入問題。
但我不確定“更新可視樹”是什么意思,以及是什么原因導致消息被發送到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
靜態方法。
據我所知,無法知道何時處理可以修改控件可視狀態的事件,也無法知道您的操作是否會修改UI的可視狀態,所以這只是一個問題每當你發現崩潰時就把BeingInvokes ......:S
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.