![]() |
Application.CreateForm hängt
Hallo,
kennt ihr das Problem evtl. das euer Programm unverständlicherweise bei Application.CreateForm hängt. Also wenn man ein Form öffnen möchte? Auch wenn man ganz oben bei der Form im Create einen Haltepunkt setzt braucht dieser ewig bis er dort ankommt. ca. 15 Sekunden. Über den Aufrufstack kann ich auch nicht sehen, dass er noch in irgendwelche anderen Methoden springt. Hat da jemand einen Tipp? |
AW: Application.CreateForm hängt
Hast du Code im OnCreate?
|
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
Hallo,
nur in der IDE oder auch einfach so gestartet? |
AW: Application.CreateForm hängt
Datenbankkomponenten auf der Form? (mit falschen Connectiondaten)
Mit einem Profiler nachsehn, wo es hängt. (z.B. AQTime) oder manuell alles entfernen/deaktivieren/auskommentieren und Stück für Stück wieder rein, bis es wieder hängt, bzw. Stück für Stück lles entfernen und schauen ab wann es wieder geht. * Events und Komponenten auf der Form |
AW: Application.CreateForm hängt
Bei 15 Sekunden ist es doch relativ einfach:
Einfach starten und dann während der Wartezeit anhalten und schauen was der Hauptthread gerade tut, ggf. auch fortsetzen und wieder anhalten... Ist das auch im Release Modus ohne Debugger so? |
AW: Application.CreateForm hängt
In der .dpr Datei einfach mal die erstellten Formulare durchbenchen. So findest Du schnell heraus auf welches lange gewartet wird. Vielleicht habe ich es auch missverstanden und Du meinst dynamische Forms...
|
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
.. werden bei Dir die Forms alle automatisch erzeugt?
Werden in einigen Units im Initialization Abschnitt Code ausgeführt? Grüße Klaus |
AW: Application.CreateForm hängt
Zitat:
Initialization hab ich kontrolliert wird dort nichts ausgeführt. Wie himitsu bereits sagt, vermute ich auch es liegt an Datenbankkomponenten oder irgendwelchen anderen Komponenten die noch nebenherlaufen. |
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
Moin...:P
Zitat:
Zitat:
|
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
Zitat:
Dort einfach die gewünschte Eigenschaft konfgurieren, z.B.
Delphi-Quellcode:
und schon wird beim Compilieren das automatisch gesetzt.
Component.Connected := false;
|
AW: Application.CreateForm hängt
FireDAC bietet da von Haus aus noch eine andere Möglichkeit: Bei dem ConnectedStoredUsage einfach das auRunTime rausnehmen, dann wird die Connection zur Laufzeit auch nicht aktiviert. (Man kann zusätzlich auch das auDesignTime rausnehmen, dann wird die Connection auch beim nächsten mal in der IDE nicht verbunden.)
Zur Laufzeit kann man das auch pauschal für alle Connections vorgeben, wenn man vor dem Laden des ersten Forms oder Datenmoduls ein
Delphi-Quellcode:
einfügt (auDesignTime ist zur Laufzeit eh irrelevant).
FDManager.ActiveStoredUsage := []
Ergänzend müssen dann auch alle verbundenen DataSets (z.B. TFDQuery) das ActiveStoredUsage entsprechend gesetzt haben, da sonst beim Aktivieren des DataSets implizit auch die Connection geöffnet wird. Das lässt sich zur Designzeit relativ einfach über ein Multi-Select einstellen. |
AW: Application.CreateForm hängt
Mir fehlt in der ganzen Diskussion immernoch der einfachste Ansatz: Mit Debug DCUs compilieren und im Debugger durchsteppen.
Ich hatte das ziemlich am Anfang vorgeschlagen. Wenn der Threadersteller das gemacht hätte, wüsste er jezt, wonach er schauen muss, aber es ist wohl zu kompliziert. |
AW: Application.CreateForm hängt
Zitat:
Vielen Dank schonmal für die zahlreichen Tipps. |
AW: Application.CreateForm hängt
Zitat:
Meistens ist es der erste/oberste Thread in der ThreadListe (Strg+Alt+T) -> Jenen doppelt anklicken, wenn nicht aktiv. Und eventuell auch noch ein/mehrmals auf F7 oder F8. Wenn der aktuelle Stack nichts "schönes" anzeigt, noch etwas weiter und hoffen es kommt was Besseres, auf dem Weg weiter/zurück. |
AW: Application.CreateForm hängt
Zitat:
|
AW: Application.CreateForm hängt
Ich versteh nur nicht ganz, beim ersten mal dauert das ewig bis er bei FileExists ein Ergebnis liefert, wenn man es nochmal versucht kommt direkt ein Ergebnis. Nach einiger Zeit dauert es wieder lange.
Hat da evtl. noch jemand ein Tipp wie man schnell kontrollieren kann ob der Pfad(Netzwerk) erreichbar ist oder nicht? |
AW: Application.CreateForm hängt
Zitat:
![]() Ansonsten könntest du vielleicht den Server des Netzlaufwerks anpingen. Also wenn dein Pfad lautet: \\Mein_lustiger_UNC_Root\Mein_Pfad Dann kannst du
Code:
machen.
ping Mein_lustiger_UNC_Root
Wenn der UNC-Pfad auf einen Laufwerksbuchstaben gemappt ist, dann musst du noch etwas weiter ausholen: ![]() |
AW: Application.CreateForm hängt
Wenn der Server keine Pings beantworten will, dann bringt das Pingen auf den Server im UNC-Pfad gar nichts...
Von daher kann man auch gleich prüfen, ob eine bestimmte Datei im gemapten Laufwerk existiert und das Ergebnis dann halt nutzen. |
AW: Application.CreateForm hängt
In solchen Fällen macht es Sinn das asynchron im Thread zu prüfen, damit der Rest der Anwendung nicht blockiert bzw. am Start gehindert wird.
|
AW: Application.CreateForm hängt
Der einzige Vorteil vom PING:
* dort ist das mit dem Timeout besser/sicherer geregelt ... der direkte Zugriff auf die Freigabe kann schlimm (nie) enden Nachteil: * nur weil der PING geht, heißt es nicht, dass die Freigabe auch erreichbar ist * * nicht da * * keine Zugriffsrechte * aber, wie schon gesagt, nur weil der PING nicht geht, heißt es auch nicht, dass die Freigabe weg ist (PING ist ein Service/Dienst und wenn nicht aktiv, dann gibt es keine Antwortauf die PING-Anfrage) |
AW: Application.CreateForm hängt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 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