Zitat von
Innos:
Delphi-Quellcode:
type
TBinFertig = procedure(const Content: String) of object;
TMyOwnThread = class(TThread)
protected
MediaPlayer1: TMediaPlayer;
CB1: TCheckBox;
CB2: TCheckBox;
CB3: TCheckBox;
CB4: TCheckBox;
procedure Execute; override;
...
procedure TMyOwnThread.Execute;
...
if Form1.CB1.Checked=true then // geht auch... also diese Checkbox zu checken 0o
...
end;
Wieso deklarierst Du CB1..CB4 im Thread, greifst dann aber auf die CheckBoxen der Form1 zu? Hier ist das zwar gerade noch ok (weil lesend zugegriffen wird), aber ...
Form1.MediaPlayer1.Play
... hier knallts dann endgültig.
Zitat von
Innos:
Delphi-Quellcode:
procedure TSilkroadOnlineTool.Button5Click(Sender: TObject);
var Thread: TMyOwnThread;
begin
Thread := TMyOwnThread.Create(True);
Thread.Resume;
Thread.Suspend;
Thread.Terminate;
Thread.Execute;
end;
end.
Das stößt mir auf: Ich erzeuge einen Thread, wecke ihn kurz auf, lege ihn wieder schlafen, dann sage ich ihm, er soll sich beenden und rufe dann sogar die protected Methode 'Execute' auf. Das kann nicht gut gehen! Du sollst die Execute-Methode nicht anfassen, die geht dich nichts an. Sie ist nicht umsonst als 'protected' deklariert.
Wie startet man einen Thread?
a) Man ruft den Konstruktor mit dem Parameter 'False' auf (der steuert, ob der Thread bei der Geburt schläft oder gleich losbrüllt)
b) Man weckt ihn explizit mit 'Resume' oder 'Suspended := False' auf.