МО>Внутри себя запускает делегат и потом делает Hide(); при реакции на событие о Visibility change (!). Все остальные события, кажется, не то.
Ну и путаница! Какое-то Hide, и ещё Visibility change
В твоём случае (обработка файлов) имеет смысл делегат запускать при помощи BeginInvoke в асинхронном режиме. Делать это можно ещё до ShowDialog, например в конструкторе диалога. При завершении асинхронного делегата делай Close диалогу.
В асинхронном режиме не нужны никакие Application.DoEvents, так как обработка идёт в отдельном потоке. Правда, для отображения сообщений о прогрессе придётся немножко манипулировать с Form.Invoke. Потому, что нельзя обращаться к форме или контролам напрямую из другого потока.
... << RSDN@Home 1.0 beta 7a >>