C# this.Invalidate() блокирует родительскую форму для доступа
У меня есть решение VS2010 (попытался повторить мою главную проблему), в котором есть 2 проекта, и каждый проект имеет одну форму окна каждый. Mainform находится в project_1, который имеет ссылку на проект 2, где определена ChildForm.
У меня есть кнопка на MainForm, чье событие нажатия кнопки создает ChildForm и показывает. Хотя ChildForm отображается, я могу вызывать любые команды меню (каждая команда меню реализована для отображения окна сообщения), которые определены в MainForm без каких-либо проблем.
НО, с другой стороны, я сохранил весь код как есть и переопределил метод OnPaint для ChildForm с помощью this.Invalidate(), как показано ниже
protected override void OnPaint(PaintEventArgs e)
{
this.Invalidate();
base.OnPaint(e);
}
Я запустил исполняемый файл, и он открыл мою MainForm и нажал кнопку, чтобы открыть мою ChildForm, затем нажал одну из команд меню, чтобы вызвать окно сообщения, и я обнаружил, что и MainForm, и ChildForms заморожены и зависают без какого-либо ответа.
Может кто-нибудь пролить свет на то, что пошло не так с переопределением метода OnPaint, который каждый раз выполняет строку this.Invalidate(), и подсказать, как можно решить эту проблему.
С уважением, Кумар
1 ответ
Вы назвали Invalidate()
который будет стрелять OnPaint
, OnPaint
звонки Invalidate()
и снова... это цикл вызова Invalidate()
а также OnPaint
-> Ваш пользовательский интерфейс заморожен.
Решение в том, что вы должны прояснить, что вы хотите и какова цель переопределения OnPaint
Вот.