Режим сна (приостановка) и возобновления Windows запускает программу в рабочем потоке вместо основного потока

Форма окна, над которой я работаю, подписывается Microsoft.Win32.SystemEvents.PowerModeChanged и на Suspend он управляет Close() метод в форме. На Resume он управляет Run() функционировать как при начальной загрузке. Проблема заключается в том, что когда компьютер выходит из спящего режима, событие PowerModeChanged запускается в рабочем потоке с именем ".Net SystemEvents", и когда Run() называется он воссоздает форму в этом рабочем потоке вместо основного потока.

Эта форма является проектом, который я унаследовал от другого разработчика, и я новичок в программировании форм Windows. Мне интересно, есть ли лучший способ обработать процесс сна / бодрствования, а не закрывать формы и воссоздавать их при пробуждении или способ принудительно создать создание в главном потоке. Примечание. Если я удаляю код и ничего не делаю, когда компьютер спит (зависает), и ничего, когда он просыпается (возобновляет работу), тогда программа продолжает работать правильно (работает в главном потоке). Любая помощь будет оценена. Спасибо всем.

1 ответ

Решение

Захватите поток пользовательского интерфейса SynchronizationContext в статическом поле и Post() на нем, чтобы вернуться к потоку пользовательского интерфейса.

Другие вопросы по тегам