Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/28: Рейтинг темы: голосов - 28, средняя оценка - 4.71
slamer

Как приостановить работу приложения, чтобы нужное окно успело прорисоваться?

15.11.2006, 15:12. Показов 5915. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Задача - приостановить работу приложения, чтобы нужное окно успело прорисоваться. Нашел в MSDN метод потока Sleep. Кажется то, что нужно, только это метод Класса Thread, следственно вопрос - Как получить поток приложения? А если в приложении несколько потоков ( Используется Timer. ) ?.
Спасибо.
PS: VS 2005. FW 2.0.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2006, 15:12
Ответы с готовыми решениями:

Как приостановить работу стороннего приложения
Ребят СРОЧНО нужна помощь! Нужна заморозка и открытие какого либо Проэкта или Программы! Пожалуйста помогите! Зарание Благодарен! ...

Как приостановить работу приложения без его зависания
Как сделать нормальную паузу в C#, чтобы она не вешала основной поток? Допустим так: richTextBox2.Text = "BEFORE"; // ТУТ...

Временно приостановить работу приложения
Объясните пожалуйста для чайника попроще, как мне сделать задержку. Мне необходимо, чтобы по нажатию кнопки запускалось приложение, после...

6
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
15.11.2006, 16:08
Thread.CurrentThread
В случае нескольких потоков надо просто выполнять всю работу вне первого потока (который обрабатывает все события) и проблем с перерисовкой не будет.
0
slamer
15.11.2006, 18:13
Спасибо, bazile.
Это работает. Но как мне кажется, такой подход - приостановка процесса приложения не есть хорошо. Может быть посоветуете что-то другое? Поясню суть проблемы:
Приложение мониторит систему на возникновение определенного события. ( Появляется сообщение об ошибке. ) В этот момент приложение породившее исключение может быть перекрыто другими окнами, поэтому нужно вытащить его на верхний Z уровень, сфоткать и отослать куда надо. . Так вот, проблема в том, что ScreenShot выполняется сразу после функции SetForegroundWindow и нужное окно не всегда успевает прорисоваться и поэтому получается "каша".
Есть мысль использовать метод WndProc класса NativeWindow для получения события OnPaint этого окна. ( Хэндлер окна имеется. ), чтобы дождаться окончания прорисовки и только после этого продолжить выполнение программы. Но с реализацией туговато.
Как думаете, сработает ли такой подход? Имеет смысл тратить время на его реализацию? Или есть способ проще?
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
15.11.2006, 19:59
Использовать паузу в этом случае не очень хорошая идея, согласен, но другого рабочего способа тоже предложить не могу.
0
Messir
21.11.2006, 03:05
А как насчет Control.DrawToBitmap ?
UPD. А, пардон, окно-то не managed может быть... Тогда, пожалуй, можно поставить хук на WH_SHELL и ловить HSHELL_WINDOWACTIVATED сразу после отлова ошибки.
slamer
24.11.2006, 20:21
Вы правы, уважаемый messir, окошко именно "неуправляемое", и проблема как раз в синхронизации процесса SetForegroundWindow и процесса приложения. Т.е. код примерно следующий:
C#
1
2
3
4
5
6
7
8
9
public void CaptureWindowToFile( string filename, ImageFormat format )
{
IntPtr handler = User32.FindWindow( "AnyNameClass", "AnyNameWindow" ); 
User32.SetForegroundWindow ( handler );
/* Следующая функция не "ждет" завершения выполнения предыдущей т.к.
 это - [DllImport( "USER32.DLL" )] public static extern bool SetForegroundWindow
( IntPtr hWnd );, объявленная в static классе User32 */
Image img = CaptureWindow( User32.GetDesktopWindow( ) );
// ...
Я где то читал, что с помощью NativeWindow можно "подменить" событие окна на свое, тем самым видимо можно синхронизировать выполнение этих процессов. Кто нибудь знает так ли это?
Messir
25.11.2006, 03:18
slamer (24.11.2006)
Я где то читал, что с помощью NativeWindow можно "подменить" событие окна на свое, тем самым видимо можно синхронизировать выполнение этих процессов. Кто нибудь знает так ли это?
Так-то оно так, только что перехватывать? Можно WM_PAINT, в принципе, и давать команду на полную перерисовку...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2006, 03:18
Помогаю со студенческими работами здесь

Как приостановить работу основного потока?
Как приостановить работу основного потока? Проблема в том что заполнение динамического массива происходит из разных потоков,а при этом...

PyQt5 Как запускать проект, чтобы открывалось окно приложения
оно не запускается

Как приостановить работу программы на несколько секунд?
Добрый день. скажите пожалуйста, как приостановить работу программы на несколько секунд? Например, что бы создавалась иллюзия, что...

Как приостановить работу программы, до нажатия кнопки?
Появляется форма, на ней кнопка. Программа должна приостановить выполнение, пока не будет нажата кнопка. clc I=imread('coins.png'); ...

Как приостановить работу вызывающей диалог формы
Здравствуйте. У меня Form1 и моя диалоговая форма FormDialog. Вызываю из Form1 диалог FormDialog.ShowDialog Как на время, когда открыта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru