Zum Inhalt springen

VB.NET - Problem mit der NetworkStream Klasse


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo,

also ich erstelle in meiner Applikation ein Thread und starte diesen. Die Aufgabe des Threads ist es darauf zu warten das ein Client kontakt über TCP/IP aufnimmt. Hierzu verwende ich :

Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()

Dim networkStream As NetworkStream = tcpClient.GetStream()
Sendet der Client Daten so sollen diese ausgewertet werden und es sollen daraufhin bestimme daten zurückgesendet werden. Daten direkt in der Funktion des Threads zuversenden ist mit
networkStream.Write(sendBytes, 0, sendBytes.Length)

dann auch kein Problem. Problematisch wirds aber wenn ich im Thread eine andere Funktion aufrufen möchte die das senden für micht übernimmt.

Damit ich auch in dem anderen Modul in dem sich die Senden() Funktion befindet auf die Variable networkStream zugreifen kann, habe ich diese im Modul der Funktion die im Thread läuft als public und vom Typ Object deklariert.

Führe ich das ganze aus bekomme ich die Fehlermeldung:

Die Objektvariable oder die With-Blockvariable wurde nicht festgelegt - Mit Verweis auf die networkStream Zeile.

Diese Fehlermeldung sagt mir aber leider nicht sehr viel.

Wäre nett wenn mir jemand bei dem kleinen Problem helfen würde.

Gruss

Bearbeitet von phpdev
Geschrieben

Hy,

Ich nehem mal ann, dass diese Funktion innerhalb des Threads aufgerufen wird, die Funktion aber ausserhalb des Threads irgendwo in einem anderen Modul oder Klasse steckt.

Ein thread ist ja eine Art "Abschottung" vom Rest des Programmes, und daher musst du erst die Schotten überwinden bevor du eine Funktion ausserhalb aufrufst.

Um eine Funktion ausserhalb eines Threades aufzurufen musst du ein Event Erstellen und dazu ein Delegate welches dann darüber die Funktion auffruft. Dabei kann man natürlich auch Parameter mit übergeben.

Grüße

Geschrieben

Vielen Dank für deine Antwort.

Ich fange gerade erst an mich ernsthaft mit Threads auseinander zu setzen und stoße hier und da auf Probleme.

Werde das dann mal mit Delegate probieren ;)

Geschrieben (bearbeitet)

Hy,

ich arbeite gerade unter Linux, daher nicht wundern falls etwas nich stimmt. Aber es müsste in etwa so sein.



Private Event DatenSenden(strData as String) 'Ein Event Definieren

Private Delegate DatenSenden(strData as String) 'Dazu ein Delegate mit genau dem Selben Name + Attributen

'Bin mir hier nicht ganz sicher ob die Definition stimmt.

:

:

Private Sub ThreadUnterprogramm()

:

SendeDaten("Hallo welt")

:

End Sub


Private Sub Form1_DatenSenden(strData as String)

[INDENT]

If Me.InvokeRequired() Then

    Me.Invoke(....[I]Keine Ahnung mehr was hier reinkam[/I])

Else

:

:

[I]Hier kommt nun alles was du zum Senden

benötigst usw. Dzu kannst du den übergeben Parameter strData

verwenden[/I]

[/INDENT]



End Sub


:

:



So in etwa. Ein Projekt wo ich das verwendet habe, hab ich zwar auf meiner HDD, aber die ist gerade abgeschmiert und daher arbeite ich gerade mit einer Ubuntu Live CD.

Aber ich hoffe ich konnte helfen.

Grüße

Bearbeitet von Notausstieg

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...