Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Try finally Code Blöcke (https://www.delphipraxis.net/86616-try-finally-code-bloecke.html)

DelphiManiac 16. Feb 2007 11:54


Try finally Code Blöcke
 
Hallo,

ich habe ein kleines Problem, ich möchte ein wenig mehr Anwendersicherheit in mein Programm bekommen,
so dass mein Programm möglichst viele 'Ausnahmesituationen' meistern kann :lol:

Folgendes Konstrukt habe ich:
Delphi-Quellcode:
try
    Self.Enabled:=False;
    for I := 1 to 64 do
    begin
      if aktSitzung.connected = false then begin exit; end; // Hier habe ich ein exit!!!
      Get_ProduktOffset(aktPOffset,i);
      Get_AlarmHH(aktAlarmHH,i);
      Get_AlarmH(aktAlarmH,i);
      Get_AlarmL(aktAlarmL,i);
      Get_AlarmLL(aktAlarmLL,i);
      JvStringGrid1.Cells[1,i]:=FloatToStrF(aktPOffset,ffFixed,4,2);
      JvStringGrid1.Cells[2,i]:=FloatToStrF(aktAlarmHH,ffFixed,4,2);
      JvStringGrid1.Cells[3,i]:=FloatToStrF(aktAlarmH,ffFixed,4,2);
      JvStringGrid1.Cells[4,i]:=FloatToStrF(aktAlarmL,ffFixed,4,2);
      JvStringGrid1.Cells[5,i]:=FloatToStrF(aktAlarmLL,ffFixed,4,2);
      JvProgressBar1.StepBy(1);
      Application.ProcessMessages;
    end;
finally
 Self.Enabled:=True;
end;
Ich hole mir 64 Datensätze aus einem Gerät und sperre vorher mein Formular, damit der Benutzer nicht wild herumklicken kann (weis das ist die Hammerschlag Methode (werde mir auch noch was anderes einfallen lassen) aber so probier ich es ersteinmal).
Dann könnte evtl. die Verbindung abbrechen, dann will ich dass er sofort den Finally block ausführt!!!
Ich prüfe ja oben ob noch eine Verbindung besteht, falls nein springe ich raus aus der Routine, aber dann wird ja mein
Finally Block nicht ausgeführt, oder ?????

Danke für eure Antworten

mkinzler 16. Feb 2007 11:56

Re: Try finally Code Blöcke
 
Dann verwende besser Try<Typ>To<Typ>()!

Luckie 16. Feb 2007 11:58

Re: Try finally Code Blöcke
 
Ein finally-Block wird immer ausgeführt, auch wenn im try-Block ein exit steht.

DelphiManiac 16. Feb 2007 11:59

Re: Try finally Code Blöcke
 
Hallo, ich glaube meine Frage hat sich schon beantwortet,

durch dass Application.ProcessMessages, werden ja die Windows-Nachrichten abgearbeitet,
das heißt der TimeOut von mir wird erkannt und ein !!! modales Fenster !!! öffnet sich und fragt, ob man nochmal versuchen will zu verbinden, da das Fenster modal aufgerufen wird, wird der Finally Block erst nach dem Schliessen des Fensters aufgerufen.
Aber er wird aufgerufen, obwohl ich rausgesprungen bin (soll ja auch so sein :o

Danke euch trotzdem.

**CLOSE**

ste_ett 16. Feb 2007 11:59

Re: Try finally Code Blöcke
 
Zitat:

Zitat von DelphiManiac
Ich prüfe ja oben ob noch eine Verbindung besteht, falls nein springe ich raus aus der Routine, aber dann wird ja mein
Finally Block nicht ausgeführt, oder ?????

Danke für eure Antworten

Warum probierst du es nicht einfach aus? :)

Delphi-Quellcode:
  try
    ShowMessage('try');
    if (1 = 1) then
      Exit;

    ShowMessage('try 2');

  finally
    ShowMessage('finally');
  end;

DelphiManiac 16. Feb 2007 12:50

Re: Try finally Code Blöcke
 
@Luckie:

Hi, ja du hast Recht, siehe mein 2. Posting.
Wieder was dazu gelernt..
Danke dir trotzdem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz