![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как отменить выполнение обработчика?
Delphist2 © (2010-04-06 06:14:00)Есть кнопка, ее обработчик может выполняться долго. Как добавить возможность отмены выполнения?
Если долго выполняется метод adocommand.execute, то как можно отменить его, не дожидаясь результата запроса?
И. Павел (2010-04-06 10:13:00) [21]Поставьте таймаую. Если возвратится ошибка - завершайте выполнение обработчика. Если основной целью является не предоставление пользователю возможности работы с программой во время запроса, а нужно просто прервать запрос, например, если ничего не вернулось после 30 сек., то асинхронное выполнение запросов для данной задачи не требуется и только усложнит программный код.
Delphist2 (2010-04-06 09:53:00) [22]А если надо прибить сразу весь обработчик (не обязательно этот а вообще), то это же надо в поток его оформлять, без потоков в таком случае никак?
Delphist2 (2010-04-06 09:43:00) [23]
> причина из-за чего отменяешь
Ну там причина это удобство пользователя. Пользователь неправильно ввел параметры, запустил запрос, обнаружил что парамеры не те и не дожидаясь результатов перезапустил с др. параметрами.
sniknik (2010-04-06 09:18:00) [24]> Ну допустим поставлю, а как отменить?
ну допустим почитаешь справку.
> В каком смысле не понадобится?
а в каком смысле она тебе нужна? причина из-за чего отменяешь. так вот эта причина может исчезнуть при переделке логики (это не просто "поставлю") на асинхронность.
MsGuns (2010-04-06 09:14:00) [25]>Delphist2 (06.04.10 09:04) [3]
>Асинхронно - это eoAsyncExecute? Ну допустим поставлю, а как отменить?
TADOCommand.Cancel
>> сделать асинхронно, то возможно не понадобится отмена...
>В каком смысле не понадобится?
В таком, что приложение не будет "висеть" и юзер, дожидаясь завершения операции, может делать что-то полезное
Delphist2 (2010-04-06 09:04:00) [26]Асинхронно - это eoAsyncExecute? Ну допустим поставлю, а как отменить?
> сделать асинхронно, то возможно не понадобится отмена...
>
В каком смысле не понадобится?
И. Павел (2010-04-06 07:55:00) [27]Может быть просто поставить таймаут?
sniknik (2010-04-06 07:50:00) [28]> Если долго выполняется метод adocommand.execute, то как можно отменить его
отменить можно только асинхронное выполнение (при синхронном отмену попросту неоткуда сделать). с другой стороны, если сделать асинхронно, то возможно не понадобится отмена... и уж точно отменять нужно будет не "обработчик кнопки которая есть".
> Как добавить возможность отмены выполнения?
сделать еще одну кнопку и вставить отмену в ее обработчик?