Delphi スレッドエラー:ハンドルが無効です。(6) の対処

DelphiでTThreadを使っていると、「スレッドエラー:ハンドルが無効です。(6)」というエラーが生成されることがあります。

FreeOnTerminateが設定されているとなぜか起こる場合がよくあるので、もしFreeOnTerminate = Trueで使っている場合は、Falseに切り替え、外部からThreadにFreeをかけるようにすると直るときがあります。

Execute内でSleepを使っていたり、重い処理などを行っている場合によくある感じです。

ただ、ものすごい単純なスレッドでもなるため、根本的な原因は不明です。

メインスレッドとのタイミングの違いかな?

どちらにしろデバッガでも原因が出ないため直しにくいエラーです。