Bei mir sieht das im Prinzip so aus:
Delphi-Quellcode:
procedure TImporter.EndImport;
begin
{unnötiges Synchronize vermeiden}
if Assigned(FOnEndImport) then
Synchronize(DoOnEndImport);
end;
procedure TImporter.DoOnEndImport;
begin
{wird im Hauptthread ausgeführt,
FOnImport könnte inzwischen durch den Hauptthread geändert sein}
if Assigned(FOnEndImport) then
FOnEndImport();
end;
Ich vermute den Fehler aber an anderer Stelle.
Jeder Thread benötigt eigene Datenbankverbindung.
Auf keinen Fall dürfen datensensitive Steuerelemente mit dieser Datenbankverbindung arbeiten.
Innerhalb des Threads:
- Exceptions müssen auf jeden Fall abgefangen und verarbeitet werden
- In OnError-Events keine Meldungen oder ähnliches.
- Die Datenbankkomponenten dürfen keine Meldungen anzeigen, den Cursor verändern oder ähnliches.