Wie erzeugst du den Thread? Mit der TThread-Klasse der
VCL oder mit
BeginThread? Wenn ersteres, die Thread-Klasse kennt das Ereignis
OnTerminate, welches aufgerufen wird, wenn die Execute Methode verlassen wird. Arbeitest du mit
BeginThread, dann schick eine Nachricht an dein Hauptthread (const TM_FINISH = WM_USER + 1). Abfangen kannst du die Nachricht, in dem du die
WndProc deiner Form überschreibst und gezielt auf deine Nachricht reagierst.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WndProc(
var Message: TMessage);
override;
end;
var
Form1: TForm1;
const
TM_FINISH = WM_USER +1 ;
type
TThreadParams =
record
FHandle: THandle;
end;
PThreadParams = ^TThreadParams;
implementation
{$R *.dfm}
function Thread(p: Pointer): Integer;
var
Handle: THandle;
begin
Handle := PThreadParams(p)^.FHandle;
SendMessage(
Handle, TM_FINISH, 0, 0);
Result := 0;
Dispose(p);
end;
procedure TForm1.WndProc(
var Message: TMessage);
begin
inherited;
case Message.Msg
of
TM_FINISH: ShowMessage('
Fertig');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tp: PThreadParams;
ThreadID: Cardinal;
begin
New(
tp);
tp.FHandle :=
Handle;
CloseHandle(BeginThread(
nil, 0, @Thread,
tp, 0, ThreadID));
end;
end.