Christian Kusmanow
Erfahrenes Mitglied
Morgen!
Ähm, hast Du mal in den Thread geschaut, den ich im 9. Post gepostet hatte?
Definier einen Delegate, verknüpfe eine Methode damit und invoke den Delegate auf dem Form...
Wie gesagt ich kann kein VB aber ich versuchs mal *g*
*hände waschen geh*
Hoffe dass das geht. Aber in dem Thread ists ja auch einfach beschrieben.
Wirst es sicher hin bekommen.
Btw. für den Serverstaus kannst auch ein Enum verwenden...
MfG,
cosmo
Ähm, hast Du mal in den Thread geschaut, den ich im 9. Post gepostet hatte?
Definier einen Delegate, verknüpfe eine Methode damit und invoke den Delegate auf dem Form...
Wie gesagt ich kann kein VB aber ich versuchs mal *g*
Code:
Imports System.Net
Imports System.Net.Sockets
Public Class Form_Programm
Dim ServerStatus As Integer = 0 '0=Offline 1=Online 2=Besetzt 3=AdminModus
'Delegate definieren
Delegate Sub SetTextCallback(ByVal [text] As String)
'Programmstart:
Private Sub Form_Programm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If ServerStatus = 0 Then
Button_Server.Text = "Server starten"
Else
Button_Server.Text = "Server anhalten"
End If
Call ServerOffline()
End Sub
'Buttons:
Private Sub Button_Server_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Server.Click
If ServerStatus = 0 Then
Call ServerOnline()
Else
Call ServerOffline()
End If
End Sub
Private Sub Button_LogLoeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_LogLoeschen.Click
ListBox_Log.Items.Clear()
End Sub
'Funktionen:
Private Sub ServerOnline()
ServerStatus = 1
ToolStripStatusLabel_ServerStatus.Text = "Online"
ToolStripStatusLabel_ServerStatus.ForeColor = Color.Green
Button_Server.Text = "Server anhalten"
BackgroundWorker_TcpListener.RunWorkerAsync()
End Sub
Private Sub ServerOffline()
ServerStatus = 0
ToolStripStatusLabel_ServerStatus.Text = "Offline"
ToolStripStatusLabel_ServerStatus.ForeColor = Color.Red
Button_Server.Text = "Server starten"
BackgroundWorker_TcpListener.CancelAsync()
End Sub
'BackgroundWorker:
Private Sub BackgroundWorker_TcpListener_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker_TcpListener.DoWork
Dim ipAdresse As IPAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList(0)
Dim Port As Int32 = 12345
Dim Server As New TcpListener(ipAdresse, Port)
Server.Start()
Do While ServerStatus = 1
Dim Sitzung As Socket = Server.AcceptSocket
'Aufruf der Methode
SetText(Date.Now & " - Verbindung hergestellt")
Sitzung.Close()
Loop
Server.Stop()
End Sub
Private Sub SetText(ByVal [text] As String)
'Wenn die ListBox in einem anderen Thread erstellt wurde
If Me.ListBox_Log.InvokeRequired Then
'Delegate mit der Methode verknüpfen
Dim d As New SetTextCallback(AddressOf SetText)
'Delegate auf dem Form invoken
Me.Invoke(d, New Object() {[text]})
'Eintrag speichern wenn die ListBox im aktuellen Thread erstellt wurde.
Else
ListBox_Log.Items.Add([text])
End If
End Sub
End Class
Hoffe dass das geht. Aber in dem Thread ists ja auch einfach beschrieben.
Wirst es sicher hin bekommen.
Btw. für den Serverstaus kannst auch ein Enum verwenden...
MfG,
cosmo
Zuletzt bearbeitet: