phpdev Geschrieben 20. Juli 2008 Geschrieben 20. Juli 2008 (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 20. Juli 2008 von phpdev Zitieren
Notausstieg Geschrieben 21. Juli 2008 Geschrieben 21. Juli 2008 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 Zitieren
phpdev Geschrieben 21. Juli 2008 Autor Geschrieben 21. Juli 2008 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 Zitieren
Notausstieg Geschrieben 21. Juli 2008 Geschrieben 21. Juli 2008 (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 21. Juli 2008 von Notausstieg Zitieren
Empfohlene Beiträge
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.