Hallo,
ich habe ein Problem, welches auch nach langer Recherche im Internet nicht geklärt werden konnte, dass mich zu schaffen macht.
Ich habe folgenden Thread (komplette
Unit):
Delphi-Quellcode:
unit uTCalendarThread;
interface
uses
Classes,Contnrs,StrUtils;
type
TCDate=class(TObject)
public
sCaption:
String;
sStartTime:TDateTime;
sEndTime:TDateTime;
end;
TCalendarThread =
class(TThread)
private
protected
procedure Execute;
override;
public
CDateList:TObjectList;
constructor Create;
destructor Destroy;
end;
implementation
uses SysUtils;
{ TCalendarThread }
constructor TCalendarThread.Create;
begin
self.CDateList:=TObjectList.Create;
//### #Problemstelle# ###
inherited Create(False);
end;
destructor TCalendarThread.Destroy;
begin
FreeAndNil(Self.CDateList);
end;
procedure TCalendarThread.Execute;
var s:TCDate;
begin
while not Terminated
do begin
s:=TCDate.Create;
//testobjekt hinzufügen
CDateList.Clear;
CDateList.Add(s);
end;
end;
end.
Beim Erstellen und Starten des Thread (TCalendarThread) erhalte ich eine "
Access Violation"-Meldung, solange es ein Programm mit
MDI-Form ist.
Aufruf innerhalb der
MDI-Form:
Delphi-Quellcode:
var TThTest:TCalendarThread;
[...]
procedure TfrmMain.FormCreate(Sender: TObject);
[...]
TThTest:=TCalendarThread.Create(false);//Instanz erzeugen und Thread starten
[...]
Sobald ich ein Delphi-Projekt ohne
MDI-Fenster erstelle/benutze, funktioniert es tadellos.
Diesen Unterschied konnte ich sicher feststellen, jedoch verstehe ich den Hintergrund nicht bzw. kann keine Lösung entwickeln. Wobei mir das Zweite wichtiger ist.
Ich hoffe, dass jemand mir weiterhelfen kann.