Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VB.NET - Problem mit der NetworkStream Klasse

Empfohlene Antworten

Veröffentlicht

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

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

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 ;)

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.