Страница: 1 |
Страница: 1 |
Вопрос: Подключение модулей
Добавлено: 11.04.06 20:51
Автор вопроса: Barulya
У меня такой вопрос, в одном из программ используются ряд модулей, которые необходимо использовать и в других программах в том же самом виде, отличаются только данные используемые этими модулями. Так например в программе А используется менеджер списков (форма), который также необходимо использовать в программе В. Для этой цели я скомпилировал менеджер списков отдельно в файл listmngr.exe и дальше для вызова модуля использовал следующий код
Dim proc As Process
Dim procInfo As ProcessStartInfo
Dim regK As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
Dim strFN As String
regK = regK.OpenSubKey("Software\BarulyaSoftware")
strFN = CStr(regK.GetValue("MainSoftwarePath")) & "\" & "listmngr.exe"
procInfo = New ProcessStartInfo(strFN)
procInfo.Arguments = MODULENAME
proc = New Process()
proc.StartInfo = procInfo
proc.Start()
proc.WaitForExit()
Но при выполнении менеджера списков необходимо запретить доступ к главной форме в теле которой выполнялся код указанный выше. Наподобие того как мы запустили бы модальное окно из головной формы. При этом не включая форму менеджера списков в тело проекта.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 11.04.06 22:21
Если я правильно тебя понял, то этот код выполняется в программе, доступ к которой надо запретить.. Тогда, если честно, я вообще не понимаю что тебе надо.. И твой код вполне обеспечивает то,что тебе надо.. Метод WaitForExit вызывает остановку программы до того момента, пока не завершиться процесс( в твоем случае менеджер списков) Вот смотри, простой пример
hProcess.WaitForExit()
После запуска Notepad главная форма полностью блокирована. И Блокнот модален по отношению к главное форме, и пока ты его не закроешь главная форма недоступна!
Если же этот код выполняется не в главной форме, то что тебе мешает принудительно заблокировать нужную форму до окнчания процесса?
proc.Start()
proc.WaitForExit()
MainFormName.Enabled=True
Номер ответа: 2
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #2
Добавлено: 11.04.06 22:32
К сожалению этого не происходит. Головная форма может получить фокус, причем ее можно перемещать, при получении фокуса форма перерисовывается на переднем фронте, только с надписью в заголовке формы ".... (Не отвечает)" и не перерисовывает элементы формы как при длительном выполняющемся процессе. Можно ли это как нибудь обойти??
Номер ответа: 3
Автор ответа:
mich
ICQ: 261800349
Вопросов: 19
Ответов: 148
Web-сайт:
Профиль | | #3
Добавлено: 11.04.06 23:10
Dim hProcess As Process
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Enabled = False
hProcess = Process.Start("notepad.exe"
t = New Threading.Thread(AddressOf tProc)
t.Start()
End Sub
Dim t As Threading.Thread
Sub tProc()
hProcess.WaitForExit()
Me.Enabled = True
Me.Activate()
t.Abort()
End Sub
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 11.04.06 23:21
Странно... я проверял в VS 2005 и все работает отлично!
mich
а для чего задействовал поток? Разве не достаточно через Enabled заблокировать главную форму?..
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 11.04.06 23:27
Ну или вообще спрятать форму через Hide, чтоб с перерисовкой проблем не было..
Номер ответа: 6
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #6
Добавлено: 11.04.06 23:34
2mich
через потоки вполне нормально получается, спасибо
2EROS
У меня почемуйто не получается через Enabled, причину установить не получилось, пробовал в различных комбинациях
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 12.04.06 00:41
А у тебя случайно не VS 2003?
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 12.04.06 01:29
Попробуй такой вариант.. (без потоков)
Me.Hide()
hProcess.WaitForExit()
Me.Show()
Номер ответа: 9
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #9
Добавлено: 12.04.06 09:21
2EROS
у меня VS 2003?
Номер ответа: 10
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #10
Добавлено: 12.04.06 12:35
Да, именно у тебя.. Мне просто очень интересно почему не блокируется окно при вызове WaitForExit
Номер ответа: 11
Автор ответа:
Barulya
Вопросов: 29
Ответов: 55
Профиль | | #11
Добавлено: 12.04.06 21:24
2EROS
у меня VS 2003! (сорри плз вместо ! поставил ?)