Вы должны войти, чтобы создавать сообщения и темы.

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

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

Привет 🖐

Form1.Method();

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

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Привет, XpucT.
Если делать так, то жалуется, что для нестатики нужна ссылка на объект.

А если сделать метод статическим, то уже ругается, что для объектов Form1 нужна ссылка.

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

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

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

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

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

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

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

Лайкнул XpucT
XpucT

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

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

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

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

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

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