Hallo Leute,
bin immernoch an der Thread-Problematik dran. Ich habe grad das Problem, dass die OnTerminate-Methode nicht aufgerufen wird.
Hier mal meine Programmstruktur, bevor ich Quelltext poste:
Also, ich habe das Hauptprogramm mit der Navigation links. Rechts ist ein großes Panel, in welchem die PlugIns angezeigt werden. Mit Klick auf einen Navigationseintrag wird das entsprechende
DLL geladen und im Panel dessen Form angezeigt. Das war's eigentlich schon.
Nun habe ich ein Update-Plugin. Es wird auch im Panel angezeigt und es arbeitet auch. Doch Ereignisse aus der
DLL-Form, die mit dem Thread verknüpft sind, werden nicht ausgeführt - so auch das OnTerminate-Ereignis nicht. Sogar dann nicht, wenn es im Thread selbst ist.
Der Thread an sich ist eine eigenständige
Unit. Hier mal Quelltext:
- Form1 des Update-
Plugins
Delphi-Quellcode:
procedure TForm1.DLFinished(Sender: TObject);
begin
ShowMessage('SD');
end;
procedure TForm1.PngBitBtn2Click(Sender: TObject);
var
UpdateSucher: TSeekUpdate;
begin
UpdateSucher:=TSeekUpdate.Create(true);
UpdateSucher.UpdateHost:='http://meinehp.de/Produkte/programmname/updates.ini';
UpdateSucher.VCLForm:=Form1;
UpdateSucher.OnTerminate:=DLFinished;
UpdateSucher.FreeOnTerminate:=True;
UpdateSucher.Resume;
end;
Delphi-Quellcode:
type
TSeekUpdate = class(TThread)
private
fHost: String;
fVCLForm: TForm;
function GetVersion(Filename: string): string;
procedure SetUpdateHost(Value: String);
procedure SetVCLForm(Value: TForm);
procedure Test(Sender: TObject);
protected
procedure Execute; override;
published
property UpdateHost: String read fHost write SetUpdateHost;
property VCLForm: TForm read fVCLForm write SetVCLForm;
end;
procedure TSeekUpdate.Test(Sender: TObject);
begin
MessageBox(VCLForm.Handle, PChar('Hallo'), PChar('hallo'), 0); // Diese Box erscheint auch nicht.
end;
procedure TSeekUpdate.Execute;
var
...
begin
inherited;
Self.OnTerminate:=Test; //das zum Test, da "DLFinishes" in Form1 nicht aufgerufen wurde.
end;
Liegt es daran, dass das PlugIn eine
DLL ist? Wenn ja, wie kann ich es so umbauen, dass es trotzdem funktioniert?
Danke