![]() |
Nach MessageDlg Meldung "Programm funktioniert nicht me
Hallo zusammen,
ich habe gerade ein sehr seltsames Problem und weiß nicht genau wieso das überhaupt der Fall ist :gruebel: Ich habe einen Thread, der den kompletten Startup erledigt, sodass ein SplashScreen immer zugreifbar bleibt. Aus dem Thread mache ich einmal ein SendMessage an eine Instanz einer Klasse, in im MainThread erzeugt wurde und ein Handle bereit stellt. So sieht der Aufruf auf, d.h. dass der "Workerthread" ja wartet, bis eine Antwort kommt.
Delphi-Quellcode:
In der gerufenen Instanz erzeuge ich dann eine GUI, lasse darin einige Dinge erledigen und will danach ein MessageDlg anzeigen lassen, dass alles geklappt hat. Dabei nutze ich keinerlei Threads. Hier die Kurzfassung des Codes:
if (SendMessage(FApplicationController.Handle, WM_STARTUP_MESSAGE, Integer(smDatabaseSetup), Integer(True)) <> 0) then
raise EGeneralException.Create('Datenkbank-Setup wurde abgebrochen.', Self)
Delphi-Quellcode:
Es läuft alles perfekt, bis hin zum MessageDlg. Dort hängt sich scheinbar das Programm auf und Windows meldet freudig Programm X funktioniert nicht mehr (
DBSetupController.DeleteAll();
DBSetupController.CreateAll(); DBSetupController.Import(); // Meldung, dass alles erfolgreich abgelaufen ist MessageDlg('Datenbank-Setup wurde erfolgreich ausgeführt.', mtInformation, [mbOk], 0); ![]() Habe ich irgendwas falsch gemacht? Wird die GUI evtl. im Kontaxt des Workerthreads aufgerufen? (was ich aber nicht glaube) Oder woran kann es liegen? // Edit Gibt es evtl. irgendwelche Timeouts die es zu beachten gilt? // Edit 2 Selbst wenn ich den Call mit Synchronize aufrufe klappt es nicht und das Programm schmiert ab:
Delphi-Quellcode:
// Edit 3
procedure CallDBSetup();
begin if (SendMessage(FApplicationController.Handle, WM_STARTUP_MESSAGE, Integer(smDatabaseSetup), Integer(True)) <> 0) then raise EGeneralException.Create('Datenkbank-Setup wurde abgebrochen.', Self) end; { ... } Synchronize(CallDBSetup); Das Ganze passiert aber auch nur, wenn ich die Anwendung aus der IDE heraus starte. "Standalone" klappt alles wunderbar :wall: |
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Versuche mal Messagebox zu verwenden.
|
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Ich hab es nie ausprobiert, aber es könnte sein, daß bei SendMessage wirklich sowas passiert, allerdingt, selbst wenn es im WorkerThread ausgeführt wird, so würde zumindestens solange der Hauptthread angehalten.
Probier einfach mal PostMessage, wenn da der Fehler auch auftritt, dann liegt es nicht an der Message. |
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Zitat:
|
Re: Nach MessageDlg Meldung "Programm funktioniert nich
MessageBox ist ein API Aufruf von Windows - MessageDlg hingegen wird von Delphi selber aufgebaut (Form, Buttons etc...)
|
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Der MessageDLG ist aus der VCL und diese ist nicht threadsafe. Deswegen nimm eine MessageBox.
|
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Das Wort threadsafe wollte ich hört :zwinker: habe es in der Hilfe zu MessageBox nicht gefunden gehabt.
|
Re: Nach MessageDlg Meldung "Programm funktioniert nich
Zitat:
In der OH steht halt nicht Alles und vorallem nichts über die Innereien. |
AW: Nach MessageDlg Meldung "Programm funktioniert nicht mehr"
Wollte hiermit nur noch bestätigen, dass MessageBox einwandfrei geklappt hat.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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