2014-05-04 12 views
14

Ich habe ein WPF-Projekt, Wenn ich versuche, diesen Code auf RowLoad Ereignis ausgeführt werden soll ich unten Fehler bekam:WPF: Dispatcher-Verarbeitung ausgesetzt wurde, aber Nachrichten noch verarbeitet werden

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); 
    } 
} 

Fehler: Dispatcher Verarbeitung hat wurde ausgesetzt, aber Nachrichten werden noch verarbeitet.

Beachten Sie, dass die Gridview-Control ist Telerik RadGridView

Antwort

21

This answer beschreibt die gleiche Situation wie bei Ihnen. (Es verweist auf diese answer on a different website).

Die Dispatcher-Verarbeitung wird angehalten, um Probleme beim erneuten Auftreten beim Aktualisieren der visuellen Struktur zu vermeiden.

Wenn Sie wirklich ein Meldungsfeld als Reaktion auf Ihr Ereignis "Row Loaded" anzeigen müssen, müssen Sie den Aufruf mit `Dispatcher.BeginInvoke() verzögern.

So ersetzen:

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

mit:

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

Wenn dieser Code in einem WPF-Objekt ist, dann ist die Dispatcher Eigenschaft zur Verfügung steht. Andernfalls müssen Sie es von woanders bekommen.