Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi-Exe in c#-Anwendung starten (https://www.delphipraxis.net/216112-delphi-exe-c-anwendung-starten.html)

egal 30. Okt 2024 08:35

Delphi-Exe in c#-Anwendung starten
 
Hallo zusammen,

ich muss eine eigene VCL-Delphi-Anwendung vorübergehend in einer C#-Anwendung starten.
Die Ladezeiten der Delphi-Anwendung sind ziemlich lang, deswegen war die Idee auf c#-Seite einen wait-Indikator oder sowas einbauen, man weiß aber da nicht, ob Delphi-Anwendung bis zu Ende geladen/gestartet wurde.
Wie kann man aus Delphi-Anwendung kommunizieren, dass die Ladezeit vorbei ist, Form wurde geladen und auf c#-Seite es empfangen/auslesen?
Danke!

Papaschlumpf73 30. Okt 2024 08:44

AW: Delphi-Exe in c#-Anwendung starten
 
Man könnte auf der C#-Seite mit FindWindow(...) warten, bis das Fenster da ist. Wobei die Frage wahrscheinlich in einem C#-Forum besser aufgehoben wäre.

QuickAndDirty 31. Okt 2024 09:13

AW: Delphi-Exe in c#-Anwendung starten
 
Ich würde eine Mutex als Semaphore nutzen.

CreaeteProcess oder SHellexecuteEX liefert dir ja auch in .net das Process handle.
So lange das handle valide ist läuft das Programm das du gestartet hast noch.
Und wenn du es gezielt beenden willst kannst du im aufrufenden Programm auch noch das Handle nutzen um es zu töten.

Um mittzuteilen ,dass es noch lädt, könnte das delphi programm eine Mutex erzeugen und diese abräumen wenn es mit dem Laden fertig ist (Beim ersten Form aktive oder so).
Das C# programm kann prüfen ob in windows diese Mutex existiert.
Es ist quasi ein abgewandelter Mechanismus den man noramlerweise verwendet um zu verhindern das ein Prgramm zweimal gestartet wird.

jaenicke 31. Okt 2024 14:18

AW: Delphi-Exe in c#-Anwendung starten
 
Wie wäre es schlicht mit Windows Messages? Die Delphi-Anwendung kann das entsprechende Handle schlicht als Parameter übergeben bekommen. Dann schickt sie dorthin im einfachsten Fall eine bestimmte Message (RegisterWindowMessage) und als Parameter Integerwerte, die den Ladefortschritt (prozentual, bestimmte Fortschrittspunkte als ID, ...) enthalten. Dann kann man auch gleich den Ladefortschritt anzeigen und nicht nur eine Warteanimation.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 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