v8: Как "обработать" ОбработкаПрерыванияПользователя() ? #468840


#0 by TDI
Как обработать прерывание пользователем обработки? например как сообщить "Вы нажали ctrl+break", после того как пользователь прервал цикл нажатием ctrl+break ?
#1 by rbcvg
так вроде сообщение появляется, типа "остановлено пользователем"
#2 by TDI
ну да, но мне нужно это по особому обработать
#3 by acsent
НИКАК
#4 by TDI
да ладно...не может быть такого... ведь должен быть способ..
#5 by AquaKosh
Да ладно! Никогда не говори никогда! :) Можно, была уже тема тут. В общем - через обработку ожидания.
#6 by AquaKosh
Типа такого что-то: ... ЭтаФорма.ПодключитьОбработчикОжидания("ПриОжидании",0.1,Истина); Для Каждого ЭлементКоллекции Из Коллекция Цикл ... ...
#7 by TDI
а как в проценуре ПриОжидании, понять ,сработало событие ОбработкаПрерыванияПользователя или нет ?
#8 by AquaKosh
Ну это... реквизит какой завести... :)
#9 by TDI
так а в какой момент этот реквизит этот поменять? Ведь нет такого событие, которое срабатывает при прерывании пользователем выполнения...
#10 by TDI
->
#11 by AquaKosh
Ну вот так например...
#12 by NewNick
взлетит. ток обработчик надо не разово подключать и 0.1 секунда как то жестковато ))
#13 by TDI
а если в процедуру ПриОжидании, попадёт в тот помент, когда хотя реально прерывания небыло ?
#14 by NewNick
хотя как раз правильно разово ток в нужный момент )
#15 by NewNick
#16 by AquaKosh
Эт как это он попадёт, если система занята циклом?
#17 by TDI
ну ОбработкаПрерыванияПользователя в цикле же стоит?
#18 by NewNick
в не попадет )
#19 by TDI
Кажется работает.. только я не совсем понял "физику" процесса, почему в процедуру ПриОжидании программа всего один раз попадает, и именно при событии ПрерыванииПользователя ?
#20 by AquaKosh
Форма.ПодключитьОбработчикОжидания (Form.AttachIdleHandler) ПодключитьОбработчикОжидания (AttachIdleHandler) Синтаксис: ПодключитьОбработчикОжидания(<Имя процедуры>, <Интервал>, <Однократно>) Параметры: <Имя процедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания. <Интервал> (обязательный) Тип: Число. Интервал времени с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число). Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина. <Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания. Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь Описание: Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени. Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения. Примечание: Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания. Пример: ПодключитьОбработчикОжидания("ПриОжидании", 1); См. также: Форма, метод ОтключитьОбработчикОжидания Глобальный контекст, метод ПодключитьОбработчикОжидания
#21 by TDI
да это я читал.. Но всё равно, не понятно, почему она сарбатывает один раз именно когда мы нажали Ctrl+Break, а не при втором проходе цикла, или десятом..? :)
#22 by NewNick
подключает обработчик разово (третий параметр - истина) на 0.1 секунду как раз перед вызовом обработкипрерывания
#23 by TDI
всё равно не пойму, она подключается на 0.1 сек, но ведь каждый раз при выполнении цикла.. А почему именно при срабатывании ОбработкиПрерывания она активируется ? ;)
#24 by NewNick
она срабатывает каждый раз в цикле. кстати может отработать и криво если за 0.1 секунду цикл успеет дойти до строки БылоПрерывание = Истина; но не взвести обработчик заново. шанс конечно очень и очень мал. но все же. можно будет подумать как это обойти )
#25 by NewNick
понял ) у тебя цикл быстрей чем 0.1 секунда идет и каждый раз срабатывание откладывается на 0.1 секунду
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С