Hey,
ich möchte gerne ein Formular aus dem OnExecute Ereigniss des IdTCPServers heraus modal öffnen und warten, bis es geschlossen wurde. Da das Ereigniss in einem Thread abläuft kommt es zu Fehlern mit der
VCL, da diese ja nicht threadsicher ist. Wie kann ich jetzt das Formular trotzdem anzeigen?
Habe folgendes probiert, was aber nicht funktioniert, da ich den Fehler "Zugriff verweigert" und beim Beenden mehrere diverse Exceptions erhalte:
Delphi-Quellcode:
procedure TAuthThread.DoShow;
begin
TfrmAuth(Form).ShowModal;
end;
procedure TAuthThread.Execute;
begin
inherited;
Synchronize(DoShow);
end;
function TfrmMain.AuthServerDlg(CData: TClientData): Boolean;
var
frmAuth: TfrmAuth;
tAuth: TAuthThread;
begin
frmAuth := TfrmAuth.Create(Application);
try
frmAuth.ClientData := Pointer(CData);
tAuth := TAuthThread.Create(true);
tAuth.FreeOnTerminate := true;
tAuth.Form := Pointer(frmAuth);
tAuth.Resume;
// ersetze ich dies mit WaitForSingleObject friert alles ein; Tag wird im OnClose des Forms auf 1 gesetzt
while frmAuth.Tag = 0 do
begin
Application.ProcessMessages;
end;
Result := frmAuth.Success;
finally
frmAuth.Free;
end;
end;
Vielen Dank