PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Vb.net]Form wird nit geladen



Lord_Ben@
16.03.2010, 18:16
tach ich habe folgendes prob und zwar würde ich gerne wissen warum hierbei meine form nit geladen wird...
wäre nett wenn ihr mir helfen könntet.

Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Imports System.Threading
Public Class Form1
Private server As TcpListener
Private client As New TcpClient
Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
Private list As New List(Of Connection)
Dim t As New Threading.Thread(AddressOf ListenToConnection)
Dim c As New Connection

Private Structure Connection
Dim stream As NetworkStream
Dim streamw As StreamWriter
Dim streamr As StreamReader

End Structure



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
server = New TcpListener(ipendpoint)
server.Start()

While True
client = server.AcceptTcpClient


c.stream = client.GetStream
c.streamr = New StreamReader(c.stream)
c.streamw = New StreamWriter(c.stream)


list.Add(c)


t.Start(c)


End While
End Sub

Private Sub ListenToConnection(ByVal con As Connection)
Do
Try
Dim tmp As String = con.streamr.ReadLine

For Each c As Connection In list
Try

c.streamw.Flush()
Catch
End Try
Next
Catch
list.Remove(con)

Exit Do
End Try
Loop
End Sub
End Class

Sawyer
16.03.2010, 18:38
Weil du nicht mit Threads arbeitest. Alles läuft auf dem Haupt-Thread weshalb die Anwendung auch nicht korrekt angezeigt wird. Wie bereits erwähnt das ganze in einem separaten Thread auslagern.

MfG, Sawyer

Lord_Ben@
16.03.2010, 18:49
ähm welches ganze kannste mal nen beispiel geben??

Sawyer
16.03.2010, 19:08
Du hast eine Funktion zwar bereits in einem Thread ausgelagert, aber nicht alles. Deinen Verbindungsaufbau solltest du natürlich auch noch einmal extra auslagern.


Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Imports System.Threading

Public Class Form1
Private server As TcpListener
Private client As New TcpClient
Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
Private list As New List(Of Connection)
Dim t As New Threading.Thread(AddressOf ListenToConnection)
Dim c As New Connection

Private Structure Connection
Dim stream As NetworkStream
Dim streamw As StreamWriter
Dim streamr As StreamReader

End Structure

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim th As New Thread(AddressOf Verbinde)
th.Start()
End Sub

Private Sub Verbinde()
server = New TcpListener(ipendpoint)
server.Start()

While True
client = server.AcceptTcpClient


c.stream = client.GetStream
c.streamr = New StreamReader(c.stream)
c.streamw = New StreamWriter(c.stream)


list.Add(c)


t.Start(c)

End While
End Sub

Private Sub ListenToConnection(ByVal con As Connection)
Do
Try
Dim tmp As String = con.streamr.ReadLine

For Each c As Connection In list
Try

c.streamw.Flush()
Catch
End Try
Next
Catch
list.Remove(con)

Exit Do
End Try
Loop
End Sub
End ClassMfG, Sawyer

krusty
16.03.2010, 19:09
ich erkläre nochmal:
weil du den source 1 zu 1 von vb-paradise kopiert hast, das ganze nicht in eine konsolenanwendung, sondern WindowsFormsanwendung geschmissen hast und nicht mit threads arbeitest.

Beispiel
Dim tThread as new System.Threading.Thread(of Adress SubName)
tThread.start()

SubName ist in dem Falle der Name der Sub, die im Thread ausgeführt werden soll.

Edit:
to Sawyer so wird es probleme mit den Controlls geben und der Thread im Hintergrund weiterlaufen, sollte das Programm beendet werden

Lord_Ben@
16.03.2010, 19:32
ja das mit den controlls habe ich aber grade noch so hinbekommen :)