Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.200.74.73] |
|
Сообщ.
#1
,
|
|
|
Есть N форм в проекте, при завершении проги все они выгружаются в цикле. Когда завершаю прогу в отладчике, часто бывают моменты что прога не завершается (грузится frmMain). На форме frmPublic стоит таймер 10сек, в котором есть обращение к контролам на frmMain. Допускаю, что выгружается frmMain в цикле, затем срабатывает таймер(загрузка frmMain), затем выгружается frmPublic... Но интевал таймера достаточно велик. Или же проца таймера может выполниться и после выгрузки frmPublic? Просто не знаю уж на что думать...
Public Sub EndPrg() Dim iForm As Form For Each iForm In Forms Unload iForm Next End Sub |
Сообщ.
#2
,
|
|
|
Цитата BlackSun @ при завершении проги все они выгружаются в цикле. А порядок выгрузки отфонарный, что ли? |
Сообщ.
#3
,
|
|
|
Видно же, что произвольный, зависит от положения в Forms. Вопрос в том, что между выгрузкой форм может ещё что-то выполняться?
Добавлено И вопрос в том, нужно ли отключать таймеры перед выгрузкой формы (чтобы исключить выполнение кода после выгрузки)? |
Сообщ.
#4
,
|
|
|
Цитата BlackSun @ произвольный, зависит от положения в Forms Что мешает установить определённый порядок выгрузки? А ещё - если существуют зависимости, то перед выгрузкой очередной формы следует убедиться, что завершился процесс выгрузки предыдущей. For i = LBound(strFormName) to UBound(strFormName) If IsLoaded(strFormName(i)) Then Unload strFormName(i) End If Do While IsLoaded(strFormName(i)) DoEvents Loop Next i Цитата BlackSun @ между выгрузкой форм может ещё что-то выполняться? Если что-то запущено - оно будет выполняться. Цитата BlackSun @ нужно ли отключать таймеры перед выгрузкой формы Ну вообще-то да... останавливать таймеры и другие асинхронные процессы, закрывать и выгружать используемые ресурсы (соединения, СОМ-объекты и пр.), если это не делается в Form_Unload. |
Сообщ.
#5
,
|
|
|
Цитата Akina @ Если что-то запущено - оно будет выполняться. т.е. выгрузка формы происходит в фоновом режиме? Ну таймеры-то остановить не проблема, вопрос в том, действительно ли нужно это всегда делать? Просто в инете никогда не видел, чтобы об этом писалось, а значит, проблемы не существует? Добавлено Кстати, есть ещё сокеты, может проблема больше в них, чем в таймерах... Придётся закрывать и их. |
Сообщ.
#6
,
|
|
|
Цитата BlackSun @ т.е. выгрузка формы происходит в фоновом режиме? Ну если проанализировать мануал https://msdn.microsoft.com/en-us/library/aa...9(v=vs.60).aspx , то возникает ощущение, что процесс выгрузки асинхронен. Правда, явно об этом не пишут. Да ещё эти хитровывернутые пояснения, что выгружается, а что не очень... Но самое главное, что любой объект существует в двух ипостасях. Если в проекте есть форма, можно общаться как с ней (абстрактный экземпляр), так и с конкретным загруженным экземпляром класса этой формы. Взаимоотношение их, а также их с приложением, мне так и не стали ясны, потому я лично очень осторожно отношусь ко всем объектам и их компонентам. Понятно, что время выгрузки и де-инициации таймера на многие порядки превышает установленное время периодического запуска метода... но раз в год и метла стреляет. Так что береги ноги. |