Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Связка глобальный Catch и управление контролом формы извне

Всем привет.
На канале у Хачатура есть пара видео, первое — обработка глобального catch, второе — как управлять Form1 из других форм с помощью передачи owner.
При падении в catch, как и в туториале в Program.cs вывожу mbox и после этого выполнить функцию которая прописана в Form1.
Возможно ли это и если да, то как?

Привет 🖐

Form1.Method();

И больше ничего не нужно =)

Привет, XpucT.
Если делать так, то [simple_tooltip content='']жалуется[/simple_tooltip], что для нестатики нужна ссылка на объект.

А если сделать метод статическим, то уже [simple_tooltip content='']ругается[/simple_tooltip], что для объектов Form1 нужна ссылка.

Что-то в проекте уже не так, ибо ругаться может только на статику.
Если метод сделать статичным, то ругаться не должен. Даже async, это не играет роли. И даже Form1 может быть не публичным, всё равно будет работать.
То есть где-то что-то ещё изменено.

Я сейчас не поленился и создал совершенно чистый проект, ничего не изменял кроме глобального catch. Всё работает.

Я вот сам создал у себя чистый проект и сделал это.
Если в вызываемом Form1.Method(); я показываю mbox то у меня тоже работает, а вот если этот метод должен взаимодействовать с контролами на форме, то он требует ссылку.
Можете плиз у себя попробовать в Method() помимо MessageBox.Show("222"); еще изменить текст кнопки на форме? Именно на это ругается.
Чтобы вот так делал

Я тогда вижу слишком много костылей, которые проще заменить на отдельный catch в том методе, где может упасть. То есть глобальный использовать не нужно. Просто напомню, что говорил в одном из видео Заметок о разработке – не стоит гоняться за тем, чтобы полностью исключить использование try catch. Конечно глобальный лучше, однако, фанатизм не нужен и где нужно обернуть, лучше оборачивать отдельно. Другой вопрос, что таких try catch более 1000 в программе, тогда да, стоит думать о рефакторинге и конечно же глобальном catch. Но не тогда, когда возникают подобные тупики. Дороже костылять, честно.

То есть у Вас такая же фигня с контролами наблюдается? Для каждой функции пойду catch писать. Спасибо за ответ.

admin отреагировал на эту запись.
admin

Всё верно. То же самое, т.к. доступ нужен из нужного потока, либо менять статику на глобальную, но это, повторюсь, лишние костыли, проще обернуть try catch отдельно, а глобальный оставить под прочие непредвиденные случаи.

Цитата: XpucT от 10.06.2022, 01:25

То есть глобальный использовать не нужно.

Имею в виду не совсем не нужно, а не в этом случае. То есть глобальный останется делать свою работу, а Твой случай где нужно изменить свойства контрола – отдельный try catch.

Понял-принял, так и делаю сейчас. Ещё раз спасибо.