- Не устанавливайте флажок для элемента управления, который действительно имеет большое значение в конструкторе.
- Глобальный флаг и условные выходы, где это необходимо.
- Попробуйте ... Поймать больные места, чтобыигнорировать бессмысленное исключение.
(Использование VS 2017) Мне кажется, что это раздражение, а не ошибка.Это соответствует используемой модели.Событие вызывается нормальной работой кода, но код, который я не написал (но могу получить доступ там, где дураки боятся наступить) и где, как кажется, нет (приличного) места ранее в нормальном потоке, чтобы предвидеть это.
Самым чистым ответом, похоже, не является проверка переключателей или переключателей в конструкторе вообще, если они вызывают какой-либо значимый код.Вместо этого эти элементы управления должны быть изменены кодом (например, флажок = истина) в событии Load (например) ПОСЛЕ всей инициализации.
Здесь нет потери гибкости, поскольку оба исправлены до сборки, только в разных местах.Обработчики событий будут обрабатывать его точно так же, как если бы пользователь щелкнул элемент управления в естественном потоке хорошо разработанного приложения с графическим интерфейсом.(Это напоминает мне древнюю пословицу RPG «Не сопротивляйся циклу». (Кто-нибудь здесь помнит RPG? Я, не являющаяся частью IBM-ориентированной команды, никогда не использовал ее, но имел интересные дискуссии с некоторыми из них.) Предварительная проверкаэлементы управления попадают в неправильную часть цикла VS.)
Если по какой-либо причине это не сработает, следующая лучшая вещь - это предложенный в другом месте kludge одного логического состояния, инициализированного false и установленного в соответствующее время с помощьюусловные выходы в необходимые места, чтобы предотвратить их падение до тех пор.Это сделает работу, но это ужасно.Лучше, чем неудача.
Еще одна вещь, которую я пробовал, прежде чем я решил, что проблема с заданными на уровне конструктора проверками была проблемой, и была очень приемлемая альтернатива - поместить опасные места в Try..Catch, чтобы иметь возможностьигнорировать исключениеТакже кладжа.