Здравствуйте, sVenom, Вы писали:
V>Я и так показываю MessageBox из основного потока. Проясню некоторые детали. Представте себе главную форму с несколькими кнопками, выполняющие раличные операции, причем эти операции взаимоисключающие, т.е. когда выполняется одна, никакие другие выполняться не должны. Эти "тяжелые" операции выполняются в главном потоке, соответственно пока это происходит главное окно кажется пользователю "подвисшим". Что бы сделать интерфейс более дружественным было решено вызывать в новом потоке форму, на которой будет ProgressBar, а главный поток будет периодически репортить о прогрессе операции. Приведенный мною способ вызова дополнительной формы — единственно мне известный. Поясню: V>1) Если вызывать дополнительную форму методом new Form(...).Show(), то оно будет не живой, так как отсутствует цикл обработки сообщений. V>2) Если я попытаюсь вызвать дочернюю форму из основного потока методом Application.Run(), то поток подиснет, ибо цикл обработки сообщений бесконечный. V>Соответственно единственный выход сделать так, что бы новая форма была "живой", а основной поток не останавливался — новая форма в новом потоке черех Application.Run(), как у меня и сделано. V>В принципе это работало без проблем до тех пор, пока мне не потребовалось выдавать диалоговое окно по завершении длительной операции. Что было раньше: V>ОП — основной поток, ДП — дополнительный поток
V>1. ОП выполняется и периодически извещает ДП о прогрессе V>2. После заврешения операции ОП вызывает CloseForm() на объекте ProgressForm ДП V>3. Происходит уничтожение ProgressForm, цикл обработки оконных сообщений завершается, ДП умирает V>4. ОП вызывает метод MessageBox.Show() что бы уведомить пользователя о завершении.
V>Так вот, если выкинуть последний шаг, то все Ок. Если же он присутствует, то после того, как я кликну на Ок месседж-бокса, то есть когда я выйду из 4-го шага, форма теряет выделение и отправляется на самый задний план Windows. V>Как с этим бороться?
Такие "тяжелые" операции обычно выполняются на отдельном потоке, а в основном отображается форма с прогрессом