Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TidHTTPServer] Почему при выводе запроса в TMemo из OnCommondGet выдается ошибка AV?


Вячеслав

Вопрос

Добрый день, друзья! Столкнулся со следующей проблемой: получаю запросы от клиента, вывожу их в Memo. Периодически выскакивает AV, связанная с отрисовкой мемо. Код получения:

procedure TForm1.IdHTTPServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := 'Response';
  MemoRequest.BeginUpdate;
    MemoRequest.Text := ARequestInfo.RawHTTPCommand;
    MemoRequest.Repaint;
  MemoRequest.EndUpdate;
end;

По сути, интересует только строчка  MemoRequest.Text := ARequestInfo.RawHTTPCommand;

Все BeginUpdate-EndUpdate, Repaint добавлены в поисках решения, но они не спасают.

Как я понимаю, получение запроса происходит в отдельном потоке, в нем же я и пытаюсь обратится к мемо и вылетает AV. Вопрос в том, как это обойти? Нужна ли синхронизация потоков?

Ссылка на комментарий

Рекомендуемые сообщения

  • 1

Попробовал разобраться, что же происходит во внутренностях idHTTPServer. Ну, что могу сказать - индейцы со времен D2010 далеко продвинулись в плане запутывания кода :)

Оберните приведенный код в Synchronize, в качестве первого параметра можно передать nil.

Ссылка на комментарий
  • 1

Попробовал разобраться, что же происходит во внутренностях idHTTPServer. Ну, что могу сказать - индейцы со времен D2010 далеко продвинулись в плане запутывания кода :)

Оберните приведенный код в Synchronize, в качестве первого параметра можно передать nil.

Спасибо за наводку!

TThread.Synchronize(nil,
  procedure
  begin
    MemoRequest.Text := ARequestInfo.RawHTTPCommand;
  end);

Полёт нормальный)

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...