首先,这是我的错误
上的错误日志条目 crash program @ 15-9-2011 15:01:30error:System.InvalidOperationException: Dispatcher processing has been suspended, but messages are still being processed.
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
无论如何代码:
private void TB_postcode_cijfers_TextChanged(object sender, TextChangedEventArgs e){
if (TB_postcode_cijfers.Text != string.Empty || TB_postcode_cijfers.Text.Length > 0)
{
LBL_postcode.Content = Postcode_cijfers + Postcode_letters;
if (TB_postcode_cijfers.Text.Length == 4 && TB_postcode_letters.Text.Length == 2)
{
if (!ZoekOpPostcode(Injectioncheck(TB_postcode_cijfers.Text + TB_postcode_letters.Text)))
{
//MessageBox.Show("Geen resultaat gevonden, " + errortext);
if (MessageBox.Show("Geen resultaat gevonden, " + errortext + ".\n Wilt u overschakelen naar handmatig? ", "Handmatig?", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
RB_handmatig.IsChecked = true;
}
else
{
//
}
}
}
}}
所以在messagebox.show方法上。 这只发生在用户在表单上将读取模式切换到编辑模式时。 这涉及折叠显示一些标签和ui控件。
如果事件从userinput触发,一切都很好。 我想知道的是: 为什么隐藏和显示一些控件时会触发textchanged事件。 我该怎么做才能防止这个错误?
编辑: 上面的代码是在自定义的wpf控件中。放在winforms项目/表格中
答案 0 :(得分:22)
请参阅此thread,它描述了与您相同的问题:
异常是为了防止由于引起的重入错误而完成的 改变视觉树所产生的怪异,同时也是这样的事件 (它本身是由视觉树改变引发的)是 射击。如果你真的必须在状态时确认一下 UI元素发生变化,可能会延迟
Dispatcher.BeginInvoke
正确的做法。
要在UI线程上运行代码,请执行以下操作:
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
if (MessageBox.Show("Geen resultaat gevonden, " + errortext + ".\n Wilt u overschakelen naar handmatig? ", "Handmatig?", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
RB_handmatig.IsChecked = true;
}
else
{
//
}
}));