2014-05-04 54 views
14

我有一個WPF項目,當我嘗試運行這段代碼在RowLoad事件我有以下錯誤:WPF:調度處理已暫停,但消息仍在處理

private void ParentGridView_OnRowLoaded(object sender, EventArgs e) 
{ 
    try 
    { 
     if(((RadGridView)sender).Columns != null) 
     { 
      MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture)); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

錯誤:調度處理有已被暫停,但消息仍在處理中。

注意,GridView控件Telerik的RadGridView

回答

21

This answer描述和你同樣的情況。 (它引用answer on a different website)。

在更新可視化樹時,調度程序處理被暫停以避免重入問題。

如果您確實需要顯示一個消息框來響應「Row Loaded」事件,則需要使用Dispatcher.BeginInvoke()推遲調用。

所以,替換:

MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture)); 

有:

var msg = ((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture); 
Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(msg))); 

如果這個代碼是在WPF對象,則Dispatcher屬性可用。否則,你需要從別的地方得到它。