Thread beenden

Raabun

Mitglied
Moin

mein Problem:

ich möchte einen thread beenden, der auf eine Eingabe wartet.

Code:
 ' Thread zum Steuern des Programms
    '
    '
    Public Sub stop_nst_bde()
        Dim eingabe As String
        Dim lauf As Integer = 1
        Try
            While lauf > 0
                Thread.Sleep(1)
                write_logo()
                eingabe = Console.ReadLine()
                If eingabe.Length > 2 Then
                    If eingabe = "stop" Then
                        run = 12
                        lauf = 0
                    End If
                    If eingabe = "ini" Then
                        run = 14
                    End If

                    If eingabe = "user" Then
                        run = 15
                    End If
                    Console.WriteLine("peep")
                End If
            End While
        Catch ex As Exception
            SystemFileHandling.LogData("Stop", 1, 1)
        End Try
End Sub

Das Programm läuft als Konsolenprogramm auf einem Rechner, der nicht beobachtet oder bedient wird.
Ich müßte nun einen Weg finden, der es mir erlaubt entweder den Tastendruck zu simulieren oder den Thread einfach zu killen

Gruß

Raabun
 
Weil es nicht funktioniert. Die Konsole wartet auf eine Eingabe und solange die nicht erfolgte,
wird auch nicht die Exception ausgeführt.
IMHO, steht es auch so in der MSN...

Gruß

Raabun
 
Hallo Raabun,

ich bin mir nicht sicher, aber könntest Du nicht die SendKeys.Send()-Methode verwenden, um einen Tastendruck in der Konsole zu simulieren? Ich denke doch, dass die Methode auch auf Konsole-Applikationen angewandt werden kann.

Gruß
PhoenixLoe
 
Ach ja,entschuldige, hab nicht daran gedacht, dass ReadLine den Thread "blockiert".

Ich muss mal n bisschen rumprobieren. Wenn ich was finde, schreib ichs hier.

@PhoenixLoe:

Nein, SendKeys.Send funktioniert nur, wenn die Anwendung Window-Messages verarbeitet. Und das macht eine Konsole nicht.
 
Hallo Kyoko,

da ist etwas Wahres dran :rolleyes:.
Alternativ die Console.ReadLine()-Funktion in einen zweiten Thread auslagern, den man wie schon erwähnt per Abort-Methode beenden kann.

Gruß
PhoenixLoe
 
Naja, das wird auch nicht gehen. Das ReadLine() blokiert eben den Thread. Dann lässt er sich nicht beenden.

Ich hätte die Idee den Thread in einen eigenen Prozess auszulagern. Den kannst ja einfach hart killen.
 
@Kyoko

Du hast Recht mit:
Warum rufst du nicht einfach die Abort-Methode des Threads auf?

Ich habe ja noch meinen Restprogram, aus dem kann ich natürlich die Abort-Methode aufrufen. Der Thread ist nun weg, aber erwartet immer noch auf ein 'Enter'.
Um dies zu umgehen hole ich mir den aktuellen Prozess und kille ihn.

Process.GetCurrentProcess().Kill()

Ich hoffe nur, das nicht zuviel Schrott übrig bleibt.

Gruß
Raabun
 
Zuletzt bearbeitet:
Zurück