2017-02-19 19 views
0

Я использую Delphi 10.1 Berlin update и компонент TIdHttp от Indy. я обычно прервать соединение, используя следующий код:Delphi FireMonkey Indy TIdHttp как отменить?

procedure TMyThread.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: int64); 
begin 
    if abort then (asender as tidhttp).Disconnect; 
end; 

Это прекрасно работает в приложении VCL, а также в FireMonkey приложения до тех пор, платформа является Windows. Когда я использую этот код с MacOS в качестве цели, он мгновенно закрывает мое приложение без сообщения об ошибке или чего-либо другого.

Итак, мой вопрос в том, что я делаю неправильно, и как я могу прервать соединение, когда платформа MacOS?

+0

В течение многих лет FireMonkey страдает от проблем с обработкой исключений на OSX. Существует множество отчетов в QualityCentral, связанных с ошибкой времени выполнения 231. AFAIK, первопричина, не была найдена, но была признана проблемой. –

+0

использовать современный THTTPClient вместо Indy – Zam

+0

@ Zam - Я должен придерживаться Indy, я не могу изменить огромное количество функций на что-то еще на данный момент. – Softtouch

ответ

0

попробовать так:

procedure TMyThread.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: int64); 
begin 
    try 
    if abort then (asender as tidhttp).Disconnect; 
    except 
    end; 
end; 
+0

Спасибо, но это не помогает. На Mac это приведет к ожидаемому исключению, но все равно не прекратит соединение ... – Softtouch

4

Вместо затем вызвать Disconnect() непосредственно и разорвать подключение к сокету от TIdHTTP, я бы вызвать исключение вместо этого, как вызов SysUtils.Abort(), и пусть TIdHTTP или вызывающий поток закрыть сокет после того, как запрос был полностью прерван.

+0

Работает только на ПК, но при работе на Mac приложение полностью закрывается, а paserver показывает ошибку времени выполнения 231. Я попытался для его отладки, но ничего не выполняется после строки прерывания, а также idhttp.get не возвращается в этом случае. – Softtouch

+0

На сегодняшний день я не смог найти решение для правильной отмены indy при работе на MAC OSX. Эта проблема делает indy совершенно бесполезным, потому что пользователь не имеет возможности прервать соединение. – Softtouch

+0

@Softtouch, то вам нужно связаться с Embarcadero для поддержки. Это проблема Delphi, а не проблема Indy. Indy в значительной степени полагается на исключения, поэтому, если обработка исключений нарушена на OSX, Embarcadero должен исправить это с их конца. –