Ich bastle momentan für einen Bekannten an einer Dateisuch-Komponente. Diese benutzt intern einen Thread, der bei Funden synchronisiert Events abarbeiten lässt. Soweit alles feini, feini. Das Problem, das ich noch habe (ich zeige mal beispielhaften Vergleichscode):
Komponente
Delphi-Quellcode:
type
TMyThread = class(TThread)
private
FOnDings: TDingsEvent;
...
procedure TMyThread.DoOnDings;
begin
if Assigned(FOnDings) then
FOnDings(Parameter);
end;
procedure TMyThread.Execute;
begin
//arbeiten
if Dings then
Synchronize(DoOnDings);
end;
Formular
Delphi-Quellcode:
procedure TMyForm.DoOnDings(Parameter);
begin
EditDings.Text := Parameter;
end;
Wird nun das Programm geschlossen, kann es natürlich passieren, dass das Edit vor meiner Komponente freigegeben wird, während die synchronisierte Methode noch arbeitet. Damit endet der Zugriff auf EditDings logischerweise in einer
AV. Natürlich kann man im OnClose des Formulars den Thread terminieren, aber das muss der Anwender meiner Komponente tun, ich hätte das lieber selbst irgendwie geregelt. Leider habe ich keine zündende Idee, momentan habe ich einfach den Aufruf der zugewiesenen Methode innerhalb des Threads in einen try-except-Block gepackt, wobei der Thread im
Exception-Fall dann terminiert. Hat jemand einen schöneren Vorschlag?