私は問題があります。スレッドを使用するVCLアプリケーションがあります。このスレッドはいくつかの計算を行い、Synchronize()を介してMainFormのメソッドを呼び出します。それはすべてうまく機能します。スレッドを作成して実行する「スタート」ボタンと、スレッドを停止して解放する「停止」ボタンがあります。エラーも何もありません。
しかし、何らかの理由でアプリケーションを閉じてスレッドを実行すると、が表示されます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;