У мене є вікно, яке виконує якийсь процес з візуалізацією. І мені треба щоб можна запустити програму воно працювало, але не показувалося (тобто щоб відбулася подія Load). При цьому у користувача завжди є можливість його показувати і приховувати. Проблема в тому що у мене не виходить вирішити це питання без початкового мерехтіння через подібного коду.
Ні в Windows Forms, ні в WPF не бачу вирішення цієї проблеми.
Проблема також в тому, що вікно показується в TaskBar, але тільки коли воно видиме. Тому мені не підходять хакі на кшталт
- Установки прозорості вікна.
- Установки нульовий широти, висоти і видалення рамок.
- Винос вікна за межі екрану і т.д.
Для чого це треба і чому не можна все винести в який-небудь Task. Тому що код виконується вікном залежить від візуалізації. Мені потрібно щоб людина могла приховувати і показувати вікно коли і скільки завгодно, але щоб його стан був таким же як ніби його не приховували.
Просто так вам не вийде викликати подія Loaded. воно викликається лише тоді, коли ваше вікно реально було показано. Але, можливо, у вас спрацює обхідний шлях, який спрацював в моєму проекті.
Для початку, ми відокремимо контент вікна в UserControl. Вікно нехай буде порожнім. Контрол назвемо SimpleUserControl для прикладу.
Тепер ми на початку роботи програми створюємо контрол, але не показуємо його, таким чином:
При цьому Loaded на контролі все ще не викликається (воно викликається тільки при показі), але у вас підконтрольний будуть перебувати в «робочому» стані.
Отримав відповідь на англ. SO. Цей же код працює для WPF якщо замінити FormWindowState на WindowState. Суть в тому, що треба спочатку щоб перед "показом" встановити (в коді або дизайнера):
Потім виконати код
І відразу після цього готуємо вікно для нормального відображення при наступних викликах SomeWindow.Show:
Це можна перетворити в метод розширення для Windows Forms: