Приложение - это сервер, который просто запускается до тех пор, пока система не выключится или не получит Ctrl + C или окно консоли не будет закрыто.
Из-за необычного характера заявки «изящно» выйти невозможно. (Может случиться так, что я мог бы написать другое приложение, которое отправило бы сообщение «завершение работы сервера», но это было бы излишним для одного приложения и все же недостаточно для определенных обстоятельств, например, когда сервер (Actual OS) фактически выключается.)
Из-за этих обстоятельств я добавил « ConsoleCtrlHandler », где я останавливаю свои потоки и очищаю свои COM-объекты и т. Д. *
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
Эта настройка, кажется, работает отлично. Вот ссылка на некоторый код C # для того же самого.