Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Welches Form des wechselseitigen Auschlusses(Semaphore)?

  Alt 25. Feb 2008, 16:37
Ich denke, dass du nur deine Benutzeroberfläche verriegeln musst!!
(Tip: Actions verwenden)
Damit wird verhindert, dass eine Message in Application.ProcessMessages verarbeitet wird und du erneut in deiner Prozedur landest.
Delphi-Quellcode:
begin
  BtnStart.Enabled := False; // <===
  try
    MachEtwasHier;
    MachEtwasDort;
    while (...) do
    begin
      MachHierWasSpektakulaeres;
      Application.ProcessMessages;
    end;
  finally
    BtnStart.Enabled := True; // <===
  end;
end;
Nachtrag:
wenn das oben eine Methode deiner eigenen Klasse ist, dann wäre Folgendes empfehlenswert:
Delphi-Quellcode:
begin
  // BtnStart.Enabled := False; // wird ins Formular verlagert
    MachEtwasHier;
    MachEtwasDort;
    while (...) do
    begin
      MachHierWasSpektakulaeres;
      // Eventhandler aufrufen, falls vorhanden
      if Assigned(FOnProgress) then
        FOnProgress(self); // <===
    end;
  // BtnStart.Enabled := True; // wird ins Formular verlagert
end;
Mit dieser Änderung kannst du von Aussen vorgeben, was passieren soll, während die Methode arbeitet.
Andreas
  Mit Zitat antworten Zitat