Невозможно получить доступ к удаленному объекту во всплывающих сообщениях события CellEditFinished ObjectListView

Когда я нажимаю кнопку "Открыть модальное окно" в [Основная форма], она показывает [подчиненную форму], которая построена со списком данных с использованием компонента ObjectListView.

Когда я щелкаю столбец "Возраст", чтобы отредактировать его, и меняю значение в ячейке на ненулевое значение, затем нажимаю на пробел компонента ObjectListView (если я нажму Enter, исключение не появится) всплывающее сообщение. Я оставил это сообщение перед всеми открытыми окнами и жду 10 секунд ожидания приложения. В это время исключение показывает:

Невозможно получить доступ к удаленному объекту. Имя объекта: "ObjectListView".

Вот код:

private void button1_Click(object sender, EventArgs e)
{
    modalForm = new Form2();
    StartTimeOutTimer();
    var result = modalForm.ShowDialog(this);
}

private void ProcessTimeOut()
{
    timer1.Stop();
    seconds = 0;
    List<Form> openForms = Application.OpenForms.Cast<Form>().Where(frm => !string.Equals(frm.Name, "Form1") && !frm.IsDisposed).ToList();
    for (var i = openForms.Count - 1; i >= 0; i--)
    {
        openForms[i].Dispose();
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    seconds++;
    if (seconds == 10)
    {
        ProcessTimeOut();
    }
}

исключение в этой строке:

var result = modalForm.ShowDialog (this);

Моя репутация слишком низкая, чтобы загружать больше ссылок, поэтому я публикую код в OneDrive. Пример кода и решение здесь:

https://1drv.ms/u/s!AmQYEYkCV6gqgw6iPMVFPBKlSx1V

Я попытался добавить исходный код ObjectListView в свое решение, и ошибка произошла в методе GetHeaderControl в исходном коде v2.9.0

Пожалуйста, загрузите мой пример кода, чтобы воспроизвести исключение. Как мне исправить это исключение? Любое предложение будет оценено.

1 ответ

Решение

Я загружаю код, и это кажется ошибкой objeclistview. Я не могу это исправить, но у меня есть обходной путь для решения вашей проблемы: вы можете ShowDialog() асинхронно, например так:

 this.BeginInvoke(new Action(() => {
         var myMsgBox = new MyMsgBox("Must be 0");
         myMsgBox.ShowDialog();
      })); 
Другие вопросы по тегам