K Я смотрю в основном на однопоточное приложение Windows Forms 3.0. Недавно моему боссу добавили диалог прогресса в отдельном потоке, чтобы пользователь мог видеть некоторую активность, когда основной поток уходил, выполнял тяжелую работу и блокировал графический интерфейс.
Вышеприведенное работает нормально, если пользователь не переключает приложения или не сворачивает, так как форма выполнения располагается выше всех и не исчезнет с основным приложением. Это не так плохо, если есть много небольших операций, поскольку структура событий главной формы догоняет свои события, когда у нее появляется время, поэтому свернутые и активные флаги могут быть проверены, и, таким образом, поток диалога может соответственно скрыться или показать себя.
Но если запускается длительная sql-операция, события не запускаются. Я попытался перехватить команду WndProc, но это также появляется в очереди, когда выполняется длительная операция sql. Я также пытался подобрать процессы, найти текущее приложение и проверить различные значения памяти, используемые в потоке прогресса, и тому подобное, но до тех пор, пока операция sql не завершится, ни одно из них не будет обновлено. При удалении верхнего элемента диалоговое окно исчезает при активации другого приложения, но если основное приложение затем возвращается, оно больше не появляется.
Так что мне нужен способ узнать, свернут ли другой поток или больше не активен, что не включает в себя запрос реального потока, поскольку он блокируется, пока не завершится операция sql.
Теперь я знаю, что это не лучший способ написать это, и было бы лучше, если бы вся тяжелая обработка в отдельных потоках оставляла графический интерфейс свободным, но, поскольку это огромное древнее унаследованное приложение, пришло время переписать в эта мода не будет предоставлена, поэтому я должен работать с тем, что у меня есть.
Любая помощь приветствуется