Цель: при обработке большого количества файлов показывать диалоговое окно с надписью "подождите...", не дающее юзеру доступа к основному окну программы.
Метод реализации: Форма-диалог в конструкторе принимает делегат. Сама запускается так:
Form p = new FrmNotify(<делегат>);
p.ShowDialog(this);
p.Dispose();
Внутри себя запускает делегат и потом делает Hide(); при реакции на событие о Visibility change (!). Все остальные события, кажется, не то. При этом всё появляется и работает, но диалог не является диалогом, если можно так сказать

. При выборе в таскбаре кнопки основного окна его заголовок становится как у активного, а у диалога — "серым", неактивным. (а должен просто мигать заголовок диалога). При этом кнопки основного окна на нажатия не реагируют (DoEvents() вызывается работающей функцией постоянно). Как-то практически очевидно

, что проблема в методе вызова делегата из диалога.
Вопрос: Как действительно реализовывать подобное?
23.12.03 16:46: Перенесено модератором из '.NET' — AVK
МО>Внутри себя запускает делегат и потом делает Hide(); при реакции на событие о Visibility change (!). Все остальные события, кажется, не то.
Ну и путаница! Какое-то Hide, и ещё Visibility change
В твоём случае (обработка файлов) имеет смысл делегат запускать при помощи BeginInvoke в асинхронном режиме. Делать это можно ещё до ShowDialog, например в конструкторе диалога. При завершении асинхронного делегата делай Close диалогу.
В асинхронном режиме не нужны никакие Application.DoEvents, так как обработка идёт в отдельном потоке. Правда, для отображения сообщений о прогрессе придётся немножко манипулировать с Form.Invoke. Потому, что нельзя обращаться к форме или контролам напрямую из другого потока.
... << RSDN@Home 1.0 beta 7a >>
Здравствуйте, VladD2, Вы писали:
VD>Погляди http://rsdn.ru/article/?dotnet/regexprep_.xmlАвтор(ы): Владислав Чистяков
Дата: 26.10.2002
Аннотация: Статья рассчитана на тех, кто хочет изучить программирование в .Net и язык C#, или хотя бы понять, как можно использовать эту среду, чтобы решить стоит ли этим заниматься. Эта статья также будет полезна начинающим программистам, так как позволяет пройти весь цикл разработки программы. В качестве побочного эффекта вы получите полезную утилиту.
там как раз то о чем ты говоришь организовано.
Там диалог появляется сразу, без задержки, ведь возможно, что операция выполнится быстро и диалог просто маргнёт.
Кроме того, нет механизма для отмены операции. Обрывать поток не всегда можно.