L'application est un serveur qui fonctionne simplement jusqu'à ce que le système s'éteigne ou qu'il reçoive un message d'erreur. Ctrl + C ou la fenêtre de la console est fermée.
En raison de la nature extraordinaire de l'application, il n'est pas possible d'effectuer une sortie "gracieuse". (Il se peut que je puisse coder une autre application qui enverrait un message "d'arrêt du serveur", mais ce serait trop pour une seule application et encore insuffisant pour certaines circonstances comme lorsque le serveur (en fait le système d'exploitation) s'arrête réellement).
En raison de ces circonstances, j'ai ajouté un " ConsoleCtrlHandler " où j'arrête mes threads et nettoie mes objets COM, etc...
Public Declare Auto Function SetConsoleCtrlHandler Lib "kernel32.dll" (ByVal Handler As HandlerRoutine, ByVal Add As Boolean) As Boolean
Public Delegate Function HandlerRoutine(ByVal CtrlType As CtrlTypes) As Boolean
Public Enum CtrlTypes
CTRL_C_EVENT = 0
CTRL_BREAK_EVENT
CTRL_CLOSE_EVENT
CTRL_LOGOFF_EVENT = 5
CTRL_SHUTDOWN_EVENT
End Enum
Public Function ControlHandler(ByVal ctrlType As CtrlTypes) As Boolean
.
.clean up code here
.
End Function
Public Sub Main()
.
.
.
SetConsoleCtrlHandler(New HandlerRoutine(AddressOf ControlHandler), True)
.
.
End Sub
Cette configuration semble fonctionner parfaitement. Voici un lien à du code C# pour la même chose.
2 votes
L'événement Process.GetCurrentProcess().Exited doit se déclencher si vous avez d'abord défini Process.EnableRaisingEvents = true ; sinon, il ne se déclenchera pas.
2 votes
Duplicata possible de Capture de la sortie de la console C#
2 votes
@Triynko comment ça se fait ? Process.Exited est déclenché après la sortie du processus. Et si la propre application est quittée, aucun code n'est exécuté. Plutôt inutile, je pense.
0 votes
Exemple de travail complet en C# à la fin de cet article.
0 votes
stackoverflow.com/questions/4646827/