Ошибка при проверке существования окна
#1
Отправлено 16 марта 2012 - 11:57
Никак не могу сообразить, как быть дальше, помогите...
Функции выполняются по очереди:
function OsnPost()
{
...
BK(Sotrudnik);
stat(param);
NewSpecOP();
...
}
В конце функции stat должны закрываться все окна определенного типа (это проще сделать, поскольку в зависимости от значения param этих окон может быть либо 3, либо 4):
function stat (param)
{
....
Log.Message("Закрываем открытые ранее окна");
do
{Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Close();}
while (Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Exists);
}
После того как закрылись все нужные окна скрипт на строке while... прерывается ошибкой: "Unable to find the object MDIWindow("*")."
Как избавиться от ошибки и продолжить выполнение основной функции?
#2
Отправлено 16 марта 2012 - 12:06
нужно использовать Wait
while (Sys.Process("ProcV8").Form("FormApp*").WaitMDIWindow("*",1000).Exists);
http://tctutorial.ru/synch/
#3
Отправлено 16 марта 2012 - 13:51
#4
Отправлено 16 марта 2012 - 14:18
на vbs это было бы так
Do While Not Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*") Is Nothing Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Close() Loop
#5
Отправлено 19 марта 2012 - 05:24
Разве это не то же самое, что и Exists?а не проще проверять объект на Nothing
на vbs это было бы такDo While Not Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*") Is Nothing Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Close() Loop
#6
Отправлено 19 марта 2012 - 06:54
Нет. Если объект MDIWindow не существует, то получим не Nothing, а ошибку в логе. Поэтому надо использовать связку WaitMDIWindow + Exists, как в ответе XXX.Разве это не то же самое, что и Exists?а не проще проверять объект на Nothing
на vbs это было бы такDo While Not Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*") Is Nothing Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Close() Loop
#7
Отправлено 19 марта 2012 - 07:38
Если While поставить в начало (такой вариант пробовала одним из первых), то неизбежно происходит зацикливаниеКроме Wait, мне кажется, ещё предусловие вместо постусловия будет лучше, тоесть while в начало, а то получается что Вы сначала закрываете окно, потом проверяете есть ли оно. В случае, если в начале выполнения окошек не будет, получите ошибку.
#8
Отправлено 19 марта 2012 - 07:39
Я так и сделала - работает замечательно!:)Нет. Если объект MDIWindow не существует, то получим не Nothing, а ошибку в логе. Поэтому надо использовать связку WaitMDIWindow + Exists, как в ответе XXX.Разве это не то же самое, что и Exists?а не проще проверять объект на Nothing
на vbs это было бы такDo While Not Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*") Is Nothing Sys.Process("ProcV8").Form("FormApp*").MDIWindow("*").Close() Loop
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных