Связка глобальный Catch и управление контролом формы извне
Цитата: Удаленный пользователь от 09.06.2022, 22:29Всем привет.
На канале у Хачатура есть пара видео, первое — обработка глобального catch, второе — как управлять Form1 из других форм с помощью передачи owner.
При падении в catch, как и в туториале в Program.cs вывожу mbox и после этого выполнить функцию которая прописана в Form1.
Возможно ли это и если да, то как?
Всем привет.
На канале у Хачатура есть пара видео, первое — обработка глобального catch, второе — как управлять Form1 из других форм с помощью передачи owner.
При падении в catch, как и в туториале в Program.cs вывожу mbox и после этого выполнить функцию которая прописана в Form1.
Возможно ли это и если да, то как?
Цитата: Удаленный пользователь от 10.06.2022, 00:16Привет, XpucT.
Если делать так, то [simple_tooltip content='']жалуется[/simple_tooltip], что для нестатики нужна ссылка на объект.
А если сделать метод статическим, то уже [simple_tooltip content='
']ругается[/simple_tooltip], что для объектов Form1 нужна ссылка.
Привет, XpucT.
Если делать так, то [simple_tooltip content='
']жалуется[/simple_tooltip], что для нестатики нужна ссылка на объект.
А если сделать метод статическим, то уже [simple_tooltip content='
']ругается[/simple_tooltip], что для объектов Form1 нужна ссылка.
Цитата: admin от 10.06.2022, 00:26Что-то в проекте уже не так, ибо ругаться может только на статику.
Если метод сделать статичным, то ругаться не должен. Даже async, это не играет роли. И даже Form1 может быть не публичным, всё равно будет работать.
То есть где-то что-то ещё изменено.Я сейчас не поленился и создал совершенно чистый проект, ничего не изменял кроме глобального catch. Всё работает.
Что-то в проекте уже не так, ибо ругаться может только на статику.
Если метод сделать статичным, то ругаться не должен. Даже async, это не играет роли. И даже Form1 может быть не публичным, всё равно будет работать.
То есть где-то что-то ещё изменено.
Я сейчас не поленился и создал совершенно чистый проект, ничего не изменял кроме глобального catch. Всё работает.
Цитата: Удаленный пользователь от 10.06.2022, 00:58Я вот сам создал у себя чистый проект и сделал это.
Если в вызываемом Form1.Method(); я показываю mbox то у меня тоже работает, а вот если этот метод должен взаимодействовать с контролами на форме, то он требует ссылку.
Можете плиз у себя попробовать в Method() помимо MessageBox.Show("222"); еще изменить текст кнопки на форме? Именно на это ругается.
Чтобы вот так делал
Я вот сам создал у себя чистый проект и сделал это.
Если в вызываемом Form1.Method(); я показываю mbox то у меня тоже работает, а вот если этот метод должен взаимодействовать с контролами на форме, то он требует ссылку.
Можете плиз у себя попробовать в Method() помимо MessageBox.Show("222"); еще изменить текст кнопки на форме? Именно на это ругается.
Чтобы вот так делал
Цитата: admin от 10.06.2022, 01:25Я тогда вижу слишком много костылей, которые проще заменить на отдельный catch в том методе, где может упасть. То есть глобальный использовать не нужно. Просто напомню, что говорил в одном из видео Заметок о разработке – не стоит гоняться за тем, чтобы полностью исключить использование try catch. Конечно глобальный лучше, однако, фанатизм не нужен и где нужно обернуть, лучше оборачивать отдельно. Другой вопрос, что таких try catch более 1000 в программе, тогда да, стоит думать о рефакторинге и конечно же глобальном catch. Но не тогда, когда возникают подобные тупики. Дороже костылять, честно.
Я тогда вижу слишком много костылей, которые проще заменить на отдельный catch в том методе, где может упасть. То есть глобальный использовать не нужно. Просто напомню, что говорил в одном из видео Заметок о разработке – не стоит гоняться за тем, чтобы полностью исключить использование try catch. Конечно глобальный лучше, однако, фанатизм не нужен и где нужно обернуть, лучше оборачивать отдельно. Другой вопрос, что таких try catch более 1000 в программе, тогда да, стоит думать о рефакторинге и конечно же глобальном catch. Но не тогда, когда возникают подобные тупики. Дороже костылять, честно.
Цитата: Удаленный пользователь от 10.06.2022, 01:30То есть у Вас такая же фигня с контролами наблюдается? Для каждой функции пойду catch писать. Спасибо за ответ.
То есть у Вас такая же фигня с контролами наблюдается? Для каждой функции пойду catch писать. Спасибо за ответ.
Цитата: admin от 10.06.2022, 08:25Всё верно. То же самое, т.к. доступ нужен из нужного потока, либо менять статику на глобальную, но это, повторюсь, лишние костыли, проще обернуть try catch отдельно, а глобальный оставить под прочие непредвиденные случаи.
Цитата: XpucT от 10.06.2022, 01:25То есть глобальный использовать не нужно.
Имею в виду не совсем не нужно, а не в этом случае. То есть глобальный останется делать свою работу, а Твой случай где нужно изменить свойства контрола – отдельный try catch.
Всё верно. То же самое, т.к. доступ нужен из нужного потока, либо менять статику на глобальную, но это, повторюсь, лишние костыли, проще обернуть try catch отдельно, а глобальный оставить под прочие непредвиденные случаи.
Цитата: XpucT от 10.06.2022, 01:25То есть глобальный использовать не нужно.
Имею в виду не совсем не нужно, а не в этом случае. То есть глобальный останется делать свою работу, а Твой случай где нужно изменить свойства контрола – отдельный try catch.
Цитата: Удаленный пользователь от 10.06.2022, 10:55Понял-принял, так и делаю сейчас. Ещё раз спасибо.
Понял-принял, так и делаю сейчас. Ещё раз спасибо.