web-dev-qa-db-fra.com

WPF: le traitement du répartiteur a été suspendu, mais les messages sont toujours en cours de traitement

J'ai un projet WPF, lorsque j'essaie d'exécuter ce code lors d'un événement RowLoad, j'ai obtenu ci-dessous Erreur:

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

Erreur: le traitement du répartiteur a été suspendu, mais les messages sont toujours en cours de traitement.

Notez que le contrôle GridView est Telerik RadGridView

19
Amin Eshtiaghi

Cette réponse décrit la même situation que la vôtre. (Il fait référence à cela réponse sur un autre site Web ).

Le traitement du répartiteur est suspendu pour éviter les problèmes de réentrance lors de la mise à jour de l'arborescence visuelle.

Si vous devez vraiment afficher une boîte de message en réponse à votre événement "Row Loaded", vous devez différer l'appel à l'aide de `Dispatcher.BeginInvoke ().

Alors, remplacez:

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

avec:

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

Si ce code se trouve dans un objet WPF, la propriété Dispatcher est disponible. Sinon, vous devez l'obtenir ailleurs.

28
Dave Tillman