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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...