Toon posts:

[vb.NET 2005] Hoe een control aanspreken vanuit een thread

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een client-server applicatie te maken met multithreading. Ik was begonnen in vb.NET 2003 maar heb die geimporteerd naar 2005. Alles lukt maar ik kan niet meer vanuit mijn thread een control aanspreken want dan krijg ik "Cross-thread operation not valid error".

ik start de thread:
ThreadListener = New Threading.Thread(AddressOf Listening)
ThreadListener.Start()

Private Sub Listening()
Try
DisplayConsole("Server ip: " & System.Net.IPAddress.Any.ToString)
TCPListener = New TcpListener(System.Net.IPAddress.Any, iPort)
TCPListener.Start()
Do
Dim client As New HostConnection(TCPListener.AcceptTcpClient)
AddHandler client.lineReceived, AddressOf HostMessage
DisplayConsole("newconnection found: waiting for log-in")
Loop Until bIsRunning
Catch ex As Exception
End Try
End Sub

Private Sub DisplayConsole(ByVal sMessage As String)
txtConsole.Text = txtConsole.Text & vbCrLf & sMessage
End Sub

Wanneer hij aan de lijn "txtConsole.Text = txtConsole.Text & vbCrLf & sMessage" zit sprint hij naar de catch. Het rare is dat hij in 2003 daar niet moeilijk over doet. Nu heb ik gekeken op de msdn site daar spreken ze over de backgroundworker. Maar die examples zijn zo chaotisch en het lukt me niet echt dat toe te passen. Je moet gebruik maken van delegates en invoke maar de voorbeelden begrijp ik niet compleet. bvb http://forums.microsoft.c...aspx?PostID=9756&SiteID=1

Weet iemand een duidelijk voorbeeld of een andere oplossing om mijn textbox te kunnen aanspreken via een andere thread?

[ Voor 5% gewijzigd door Verwijderd op 30-12-2006 18:24 ]


  • Garmen
  • Registratie: December 2005
  • Laatst online: 11:09
In .NET 2 is er de BackgroundWorker class bijgekomen. Deze levert de gewenste threading via DoWork. Met ProgressChanged kun je vervolgens info doorgeven aan de eerste thread.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
En als je die BackgroundWorker niet wilt of kunt gebruiken, dan zal je moeten gaan werken met Control.Invoke. (Eigenlijk net hetzelfde wat die backgroundworker achter de schermen doet).
Zie whoami in "\[C#] button.Show() vanuit anderen Thread"

[ Voor 14% gewijzigd door whoami op 30-12-2006 20:02 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja in C# ziet dat er veel overzichtelijke ruit maar ik moet het in VB doen jammer genoeg :(

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 17:35

Rhapsody

In Metal We Trust

Verwijderd schreef op zaterdag 30 december 2006 @ 20:32:
Ja in C# ziet dat er veel overzichtelijke ruit maar ik moet het in VB doen jammer genoeg :(
Zoveel verschil zit er niet tussen die twee talen hoor.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Verwijderd schreef op zaterdag 30 december 2006 @ 20:32:
Ja in C# ziet dat er veel overzichtelijke ruit maar ik moet het in VB doen jammer genoeg :(
Wat is het probleem dan ? Het framework is net hetzelfde, alleen de syntax is verschillend. Ik denk dus dat je met de gegeven tip van de backgroundworker en de andere oplossing (die intern ook door BGW gebruikt wordt), toch al heel wat geholpen bent.
Je kan moeilijk verwachten dat we dit hier tot in detail voor jou gaan voorkauwen hoe het nu in VB.NET moet.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op zaterdag 30 december 2006 @ 23:30:
[...]

Wat is het probleem dan ? Het framework is net hetzelfde, alleen de syntax is verschillend. Ik denk dus dat je met de gegeven tip van de backgroundworker en de andere oplossing (die intern ook door BGW gebruikt wordt), toch al heel wat geholpen bent.
Je kan moeilijk verwachten dat we dit hier tot in detail voor jou gaan voorkauwen hoe het nu in VB.NET moet.
nah, natuurlijk niet :) erg bedankt
Pagina: 1