У меня проблема.У меня есть приложение VCL, используя поток.Этот поток выполняет некоторые вычисления и вызывает метод MainForm через Synchronize ().Все работает отлично, у меня есть кнопка «Пуск», которая создает и запускает поток, и кнопка «Стоп», которая останавливает и освобождает его.Нет ошибок, нет ничего.
Но по какой-то причине, когда я закрываю приложение и Я запускаю поток , я получаю EOSError 1400 - Invalid window handle
.Я остановил процедуру OnClose, и единственное, что я там делаю, - это сохранение ini-файла, в этом нет ошибки. Когда я продолжаю трассировку (используя F7), я получаю до самого конца (Application.Run; end.
) после «вызова».end.
Я получаю сообщение об ошибке, поэтому нет конкретной строки кода, вызывающей ее.
Я надеюсь, что вопрос несколько ясен, и я надеюсь, что это разрешимо, потому что просто игнорирование ошибки кажется немного нечистым.
Спасибо inb4
ОТВЕТ
Эта ошибка произошла со мной, когда был вызван метод Execute потока, он выглядел так:
procedure TRunThread.Execute;
var (...)
begin
while not Terminated do begin
(...)
MainForm.Memo1.Lines.Add('Some text'); // Even though this call worked fine during
//the application running, it caused errors on shutting the app down.
// For acccessing GUI elements, it's necessary to use Synchronize()
(...)
end;
end;