Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Привет.

Я знаю про MVVM :) Но слишком мало с ним опыта.

Поэтому решил для простой програмки, которую нужно написать очень быстро, вставить рабочий код прямо в код Window (ужос ужос).
Потом, если мне дадут время ее допилить, то прикручу туда MVVM наверное, хотя бы ради тренировки.

Подскажите, куда можно прицепить метод отчистки своих ресурсов ?

МСНД не рекомендует это делать в Unloaded, но не предлагает альтернативы.
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.unloaded(v=vs.110).aspx

If you place cleanup code within a handler for the Unloaded event, such as for a Window or a UserControl, it may not be called as expected.


А куда еще можно вставить ?
20 янв 14, 16:32    [15442034]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
WPF Падаван
МСНД не рекомендует это делать в Unloaded, но не предлагает альтернативы.
МСДН в последнее время часто жжот...

А Unloaded действительно может не вызываться, например, при закрытии приложения. Тут одно из решений на базе Unloaded. См UiDataLifetimeManager.
20 янв 14, 16:42    [15442121]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Странно.
А почему в WPF нет своих родных методов, которые бы вызывались при закрытии окна ? OnClosing там.

Я изучаю WPF, чтобы потом убедить своих коллег на него перейти. Но с каждым новым открытием у меня возникает желание забить на него самому :) Много каких то подводных камней.
20 янв 14, 17:20    [15442410]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
WPF Падаван
Странно.
А почему в WPF нет своих родных методов, которые бы вызывались при закрытии окна ? OnClosing там.
У окна в WPF такие события тоже есть. Получить ссылку на окно можно методом Window.GetWindow() если контрол находится в визуальном дереве. Только закрытие модели может не соответствовать закрытию окна. А если соответствует - то тоже нормальный вариант.
20 янв 14, 17:26    [15442463]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Алексей К,

Да, действительно, что-то я сильно протупил.
20 янв 14, 17:51    [15442608]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Погодите !
Так я могу просто в событии Closed и отчистить свои ресурсы ?
Или он опять таки может НЕ вызываться ? Зачем было делать событие, если оно то вызывается то нет - кто будет его использовать в программах ?

Ох. Чего то не понимаю :(
20 янв 14, 17:56    [15442643]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Искал еще как в WPF установить фокус на какой-либо элемент при запуске :) казалось бы.

Тоже оказывается есть минимум 5 велосипедов на эту задачку.

upd.
Я использую этот, мне его квадратные колеса понравились
MoveFocus(new TraversalRequest(FocusNavigationDirection.Next))

Но в отзывах к решению жаловались, что он глючит в многопоточном режиме программы. Если его вставлять в Application_Startup или еще куда то там, не помню.
Мда.
20 янв 14, 19:35    [15443188]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
WPF Падаван
Member

Откуда:
Сообщений: 71
Но я не жалуюсь ) Так... мелкие придирки )
Буду использовать WPF и дальше конечно же )
20 янв 14, 20:11    [15443338]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
netivan
Member

Откуда:
Сообщений: 8768
Алексей К
WPF Падаван
МСНД не рекомендует это делать в Unloaded, но не предлагает альтернативы.
МСДН в последнее время часто жжот...

А Unloaded действительно может не вызываться, например, при закрытии приложения. Тут одно из решений на базе Unloaded. См UiDataLifetimeManager.

а зачем вам при закрытии приложения unloaded? AppDomain уж должен все выгрузить :))
20 янв 14, 22:49    [15443903]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
netivan
Алексей К
пропущено...
МСДН в последнее время часто жжот...

А Unloaded действительно может не вызываться, например, при закрытии приложения. Тут одно из решений на базе Unloaded. См UiDataLifetimeManager.

а зачем вам при закрытии приложения unloaded? AppDomain уж должен все выгрузить :))
Например, для сохранения состояния приложения в базу настроек. Не хочу писать сохранение в двух местах.
21 янв 14, 06:12    [15444703]     Ответить | Цитировать Сообщить модератору
 Re: Window. Куда вставлять код отчистки ? Unloaded вроде не подходит  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
WPF Падаван
Искал еще как в WPF установить фокус на какой-либо элемент при запуске :) казалось бы.
UIElement.Focus
WPF Падаван
Тоже оказывается есть минимум 5 велосипедов на эту задачку.

upd.
Я использую этот, мне его квадратные колеса понравились
MoveFocus(new TraversalRequest(FocusNavigationDirection.Next))
Это устанавливает фокус на следующий элемент после текущего.
WPF Падаван
Но в отзывах к решению жаловались, что он глючит в многопоточном режиме программы.
WPF однопоточен по определению. У него есть внутри свои потоки, но снаружи их не видно.
21 янв 14, 06:17    [15444705]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить