Autor Beitrag
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Di 20.04.04 22:10 
ich komme einfach nicht dahinter:
ich baue gerade an einem datei-vernichter.
damit das form aber nicht einfriert während ich den code ausgeführt wird hab ich das alles in nen thread kopiert.
wenn dieser thread jetzt ausgeführt und terminiert wird, bekommt ich beim schließen des fensters diese fehlermeldung:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
---------------------------
Anwendungsfehler
---------------------------
Exception EOSError in Modul FileShredder.exe bei 0000D56E.Systemfehler.  
Code: 1400.
Ungültiges Fensterhandle.
---------------------------
OK   
---------------------------


hier ist der source zu dem programm (soll sowieso nach ein paar schönheitskorrekturen open-source werden)

www.nettraxx.de.vu/t...der2FileShredder.zip (22kB)

es werden keine extra komponenten benötigt.

THX

_________________
Patrick
im zweifelsfall immer das richtige tun!!!


Zuletzt bearbeitet von patrick am Fr 23.04.04 18:55, insgesamt 2-mal bearbeitet
patrick Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 22.04.04 12:19 
nachtrag: ich habs jetzt mal mit ner fremdkomponente versucht. dabei tritt der fehler aber nicht auf.

ich will aber keine fremdkomponenten benutzen :cry:

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.04.04 16:25 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TShredThread.Execute;
begin
  try
    with AC2FsForm1 do
    begin
      if MessageDlg('Sind sie sicher das sie die ausgewählte(n) Dateien löschen '+#13+#10+'wollen?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then
        exit;
      try
        EraseAction;
      except
        MessageDlg('Fehler beim Löschen der Dateien', mtError, [mbOK], 0);
        exit;
      end;
      Status(0,'Löschvorgang abschließen...',true);
      Progress_Small.Position:=0;
      Progress_Big.Progress:=0;
      if abort then
      begin
        Status(0,'Löschvorgang abgebrochen',true);
        MessageDlg('Der Löschvorgang wurde abgebrochen', mtError, [mbOK], 0);
      end
      else
      begin
        Status(0,'Löschvorgang abgeschlossen',true);
        MessageDlg('Der Löschvorgang wurde erfolgreich abgeschlossen.', mtInformation, [mbOK], 0);
      end;
    end;
  finally
    ShredThread.Terminate;
  end;
end;

Du hast gelsen, was als Kommentar in der Thread Unit steht, wenn du über die IDE eine Unit für einen Thread erstellst? Du bist dir im Klaren, dass du an allen Ecken und Enden in der Execute Methode von TThread auf sichtbare Komponenten der VCL zu greifst?
patrick Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 22.04.04 17:50 
Zitat:

Du hast gelsen, was als Kommentar in der Thread Unit steht,

nein, welche thread-Unit?
Zitat:

wenn du über die IDE eine Unit für einen Thread erstellst? Du bist dir im Klaren, dass du an allen Ecken und Enden in der Execute Methode von TThread auf sichtbare Komponenten der VCL zu greifst?

ja, aber ich bin mir keiner schuld bewusst (was zu 100% aus unwissenheit stammt)

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 22.04.04 18:13 
So? Dann solltst du das nächste mal richtig lesen:
Zitat:

{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure TTest.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }

Rein theoretisch reicht es den ersten Satz zu lesen.
patrick Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Do 22.04.04 18:20 
THX
das wusste ich nicht
ich werd's überarbeiten

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
patrick Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Fr 23.04.04 18:54 
fehler behoben und alles ok
THX

_________________
Patrick
im zweifelsfall immer das richtige tun!!!