Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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 вызывает остановку программы до того момента, пока не завершиться процесс( в твоем случае менеджер списков) Вот смотри, простой пример
        
Dim hProcess As Process = Process.Start("notepad.exe";)
        hProcess.WaitForExit()

После запуска Notepad главная форма полностью блокирована. И Блокнот модален по отношению к главное форме, и пока ты его не закроешь главная форма недоступна!
Если же этот код выполняется не в главной форме, то что тебе мешает принудительно заблокировать нужную форму до окнчания процесса?
MainFormName.Enabled=False
proc.Start()
proc.WaitForExit()
MainFormName.Enabled=True

Ответить

Номер ответа: 2
Автор ответа:
 Barulya



Вопросов: 29
Ответов: 55
 Профиль | | #2 Добавлено: 11.04.06 22:32
К сожалению этого не происходит. Головная форма может получить фокус, причем ее можно перемещать, при получении фокуса форма перерисовывается на переднем фронте, только с надписью в заголовке формы ".... (Не отвечает)" и не перерисовывает элементы формы как при длительном выполняющемся процессе. Можно ли это как нибудь обойти??

Ответить

Номер ответа: 3
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #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
Попробуй такой вариант.. (без потоков)

        Dim hProcess As Process = Process.Start("notepad.exe";)
        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! (сорри плз вместо ! поставил ?)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам