Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Refresh формы при запуске сторонней программы 
:(
    Опции темы
camion8707
  Дата 26.4.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.4.2010

Репутация: нет
Всего: нет



Здравствуйте, форумчане!

На Visual Basic .NET пытаюсь программировать около месяца.
Возник такой вот вопрос:

Есть программа, внутри кода программы вызывается другой процесс (CREATE.EXE - программка написанная на TurboPascal),
программа ждет, пока процесс завершится. Соответственно, во время выполнения процесса форма программы не прорисовывается.
Собственно вопрос в том, как заставить форму прорисовываться или быть активной, пока выполняется процесс CREATE.EXE?

Заранее спасибо!

Код


        For m = 1 To file_counter
            '--------------------------------------------------------
            'Запуск приложения CREATE
            Dim start_info As New ProcessStartInfo(path & "\CREATE.EXE")
            start_info.UseShellExecute = False
            start_info.CreateNoWindow = True

            Dim proc As New Process()
            proc.StartInfo = start_info

            proc.Start()
            proc.WaitForExit()

            ssProgBar.Value += (ssProgBar.Maximum - ssProgBar.Value - 10) / file_counter * m

            '--------------------------------------------------------

            file_name_count += 250
        Next

PM MAIL   Вверх
A5uKa
Дата 26.4.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Использовать таймер прерываний ?
это первое, что пришло на ум...
PM   Вверх
KelTron
Дата 26.4.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Не ждать завершения процесса методом WaitForExit, т.к. он блокирует основной поток, а подписаться на событие Process.Exited


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
camion8707
Дата 26.4.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.4.2010

Репутация: нет
Всего: нет



KelTron, СПАСИБО!

как я понял просто стоит выставить me.refresh до тех пор пока процесс не завершится.

но теперь еще один вопрос, как сделать чтобы форма не моргала, поскольку обновляется крайне часто. стоит ввести таймер или есть может какие-то еще средства?


Код

        For m = 1 To file_counter
            '--------------------------------------------------------
            'Запуск приложения CREATE
            Dim start_info As New ProcessStartInfo(path & "\CREATE.EXE")
            start_info.UseShellExecute = False
            start_info.CreateNoWindow = True

            Dim proc As New Process()
            proc.StartInfo = start_info

            proc.Start()

            Do
                Me.Refresh()
            Loop Until proc.HasExited = True

            ssProgBar.Value += (ssProgBar.Maximum - ssProgBar.Value - 10) / file_counter * m

            '--------------------------------------------------------

            file_name_count += 250
        Next

PM MAIL   Вверх
A5uKa
Дата 26.4.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Возможно вместо Refresh хватит  
Код

Application.DoEvents();

PM   Вверх
camion8707
  Дата 26.4.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.4.2010

Репутация: нет
Всего: нет



ОГРОМНОЕ спасибо A5uKa!!!

Вы меня просто очень сильно выручили!!!
А то я уже программу переделывать начал под параллельные процессы, а там свои сложности родились..

тему можно закрывать!! smile  smile 
PM MAIL   Вверх
A5uKa
Дата 26.4.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



^____^
PM   Вверх
KelTron
Дата 26.4.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Нет, я говорил про другое. Хотя всё таки это событие не поможет, оно не срабатывает. 
Надо твою функцию запустить в отдельном потоке, для этого лучше всего подойдёт BackgroundWorker.
(в цикле вызывать Application.DoEvents() плохая идея, т.к. бессмысленная нагрузка на проц)



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.