VB.NET - Konsolenanwendung - Ereignis bei Close VB 

  • Ersteller Ersteller fox(fux)
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
F

fox(fux)

Hallo Leute,
ist es irgendwie möglich bei einer Konsolenanwendung das FormClosing ereignis nachzubauen?
Ich meine ich habe eine Konsole.
Diese ist ein TCP Server und wartet auf einen Clienten, der sich verbindet.
Wenn sich ein Client verbindet, dann wickelt das Programm sein Ding mit diesem ab und wartet anschließend wieder auf einen Clienten. usw.
Also eine Endlosschleife.

Beim Beenden des Servers (Klick auf Schließen Button) muss ich jedoch noch ein paar Zeilen Code ausführen.
Nur wie fange ich den Klick auf den Schließen Button ab (damit ich die Zeilen ausführen kann und anschließend das Programm beenden....) ?

Hat einer eine Idee.
DANKE

mfg fox(fux)
 
Moin moin!
Hab grad was gefunden was dir vermutlich weiterhelfen sollte...

Code:
Imports Microsoft.Win32
Imports System.Threading

Module Module1
Declare Function SetConsoleCtrlHandler Lib "kernel32.dll" ( _
ByVal HandlerRoutine As ControlEventHandler, _
ByVal Add As Int32) As Int32

Public Enum ConsoleEvent
CTRL_C = 0
CTRL_BREAK = 1
CTRL_CLOSE = 2
CTRL_LOGOFF = 5
CTRL_SHUTDOWN = 6
End Enum

Public Delegate Sub ControlEventHandler(ByVal consoleEvent As ConsoleEvent)

Public Sub OnControlEvent(ByVal consoleEvent As ConsoleEvent)
Console.WriteLine("Event: {0}", consoleEvent)
t.Abort()
Console.WriteLine("Thread closing gracefully in 1000ms")
Threading.Thread.Sleep(1000)
End Sub

Dim t As New Thread(AddressOf looping)



Sub Main()
SetConsoleCtrlHandler(New ControlEventHandler(AddressOf OnControlEvent), True)
t.Start()
Console.ReadKey()
t.Abort()
t.Join()
End Sub

Sub looping()
Do
Console.WriteLine("Thread - working.")
Thread.Sleep(100)
Loop
End Sub


End Module

Gruß
Zerd
 
Danke für den hilfreichen Auszug.
Ich werde es gleich noch heute testen und eine Rückmeldung posten.


//Edit: NEIN, leider komme ich mit der oben genannten Methode nicht weiter.
Werde es momentan so lösen:
Ich habe das zu auf Schließen zu kontrollierende Programm (a.exe)
Habe eine b.exe, diese startet mit folgenden zeilen a.exe:
Code:
dim x as process
x = process.start(a.exe)
x.waitforexit()
jetzt kann ich die Sachen ausführen ^^
Ist nicht elegant aber es geht.

mfg fox(fux)
 
Zuletzt bearbeitet:
Komisch, bei mir funktioniert der code den ich dir geposted habe...
Sobald ich auf das X drücke bekomme ich das closed event und kann an der stelle (OnControlEvent) sachen ausführen die noch vor dem schließen gemacht werden müssen...
 
Jo von daher geht es bei mir auch.
Doch ich habe einen TCP Server, der ununterbrochen auf eine Verbindung mit einem Client wartet.
Und wenn ich nun das CloseEvent abfrage mit oben genannter Methode, dann springt eine Fehlermeldung auf.
D.h. ich müsste zuerst diesen Verbindungsversuch abbrechen...
Ich weiß aber leider nicht wie, da dies mein erster TCP-Server-Versuch ist.

Trotzdem danke für deine Antwort.

mfg fox(fux)

Ok, da ich ja eine Lösung habe, kann hier auch auch zu!

--------closed----------

Danke fox(fux)
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten