WPF: обработка диспетчера приостановлена, но сообщения все еще обрабатываются

У меня есть проект WPF, когда я пытаюсь запустить этот код в событии RowLoad, я получил ниже Ошибка:

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

Ответы

Ответ 1

Этот ответ описывает ту же ситуацию, что и ваша. (Он ссылается на этот ответ на другом сайте).

Обработка диспетчера приостанавливается, чтобы избежать проблем с появлением при обновлении визуального дерева.

Если вам действительно нужно отобразить окно сообщения в ответ на ваше событие "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. В противном случае вам нужно получить его откуда-то еще.