Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Try..except außerhalb des VCL-Threads (https://www.delphipraxis.net/170011-try-except-ausserhalb-des-vcl-threads.html)

jfheins 27. Aug 2012 10:52

AW: Try..except außerhalb des VCL-Threads
 
Guck dir mal das hier an: http://edn.embarcadero.com/article/10452
Wenn du anstatt von
Delphi-Quellcode:
Application.ShowException
die Methode
Delphi-Quellcode:
Application.HandleException
aufrufst, müsstest du die Exception im Application.OnException Event behandeln können.

Luckie 27. Aug 2012 10:52

AW: Try..except außerhalb des VCL-Threads
 
Ja, das ist der Punkt. Wie man die Exception Behandlung aus dem Thread rausbekommt und in den Mainthread auswertet. Ich habe es bisher immer mit Nachrichten gelöst, die ich im Fehlerfall aus dem Thread verschickt habe.

Medium 27. Aug 2012 10:59

AW: Try..except außerhalb des VCL-Threads
 
Der Artikel von jfheins klingt zunächst prima, aber leider würde auch hier dank des Synchronized der Thread angehalten, so lange der Handler "unterwegs" ist. Oder kann ich Application.HandleException gefahrlos im Threadkontext aufrufen? (Hab gerade kein Delphi hier - wenn das letztlich auch nur ein PostMessage macht, wäre das zumindest eine nette Kapselung der von Luckie und mir genannten Methode :))

himitsu 27. Aug 2012 13:07

AW: Try..except außerhalb des VCL-Threads
 
Synchronize = synchrone Synchronisierung
Queue = asynchrone Synchronisierung
Delphi-Quellcode:
  try
    //...
  except
    on E: Exception do begin
      S := E.Message;
      //TThread.Queue(nil, procedure // in Threads ohne eine TThread-Instanz, bzw. ohne direkten Zugang dazu
      Queue(procedure // in einer TThread-Instanz
        begin
          ShoweMessage(S);
        end);
    end;
  end;
Man könnte statt dem ShowMessage auch ShowException verwenden, aber dann muß man bei asyncrhoner Anzeige entweder das ExceptObject klonen oder es von der Exceptionbehandlung abtrennen und anschließend natürlich manuell freigeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz