![]() |
Delphi-Version: XE
try except bei TFileStream im Thread
Hallo.
Ich habe folgendes in einem Thread gemacht:
Delphi-Quellcode:
Nun hatte ich den Fall, dass beim create einen Exception aufgetreten ist, weil die Pfadangabe nicht richtig war. Allerdings ist diese Exception immer 'versumpft', wurde also nie gemeldet, da das create ja nicht im try Block war.
FileStream := nil;
FileStream := TFileStream.Create(Path + Filename, fmCreate); try FileStream.Write(MyString[1], Length(MyString) * 2); except on E:Exception do Application.MessageBox(PWideChar('FileStream Exception: ' + e.Message) , 'Exception', MB_OK + MB_ICONQUESTION); end; if assigned(FileStream) then FreeAndNil(FileStream); Gehört das create in diesem Fall dann doch in den try Block? Sonst liest man, dass da da eigentlich nicht reigehört... |
AW: try except bei TFileStream im Thread
Hi, ich würds so machen:
Delphi-Quellcode:
try
FileStream := TFileStream.Create(Path + Filename, fmCreate); try // Aus '2' habe ich SizeOf(Char) gemacht FileStream.Write(MyString[1], Length(MyString) * SizeOf(Char)); finally FileStream.Free; end; except on E:Exception do Application.MessageBox(PWideChar('FileStream Exception: ' + e.Message) , 'Exception', MB_OK + MB_ICONQUESTION); end; |
AW: try except bei TFileStream im Thread
Man könnte auch den Exception-Text einfach nur erweitern und dann weiterreichen, anstatt gleich die ganze Exception abzufangen.
Delphi-Quellcode:
try
FileStream := TFileStream.Create(Path + Filename, fmCreate); try FileStream.Write(MyString[1], Length(MyString) * SizeOf(Char)); finally FileStream.Free; end; except on E: Exception do E.Message := 'FileStream Exception: ' + E.Message; raise; end; Zitat:
Schön daß man Unicodefehler auf auf einem Unicode machen kann ... wehe es beschwert sich dann einer, daß es in ANSI nicht läuft :warn: Application.MessageBox ist auf PChar definiert, also sollte man dan nicht einfach wo PWideChar verwenden. |
AW: try except bei TFileStream im Thread
Seid ihr euch sicher, dass eine MessageBox in einem Thread sinnvoll ist?
Und eine Exception in einem Thread (auch wenn die nochmals geraised wird) verliert sich im Nirwana. |
AW: try except bei TFileStream im Thread
nja, diese wäre wenigstens nicht so threadunsicher, wie die VCL,
aber wenn man dann auch noch so "blöd" ist und die MessageBox ebenfalls über die VCL laufen läßt, der braucht sich dann nicht wundern, wenn irgendwann die VCL gleich mit verreckt. :stupid: - die Windows.MessageBox ist quasi threadsicherer - Forms.Application.MessageBox nutzt sehr viel von der VCL, bevor es den Aufruf an Windows.MessageBox weiterleitet Thread-Exceptions verlieren sich nicht im Nirvana ... du darfst nur nicht vergessen diese abzufragen, :roll: da Delphi sie aus dem Thread rausreicht ... da gab's vor Kurzem einen DP-"Thread" dazu. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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-2025 by Thomas Breitkreuz