webForumDet fria alternativet

Uppdatera textbox i tråd

.NET

2 svar · 355 visningar · startad av pettsson

Medlem sedan jan. 20021 122 inlägg
Frågan#1

Jag läser en indataström i en tråd, och vill sedan skriva den i en textbox. Försöker man göra detta rakt av (textbox.text = ...) får man InvalidOperationException för att jag försöker ändra en kontroll i fel tråd. MSDNs exempel (http://msdn2.microsoft.com/en-us/library/ms171728(d=ide).aspx) på hur man ska göra verkar både opraktiskt (kan inte skicka några parametrar) och krångligt.
Det måste väl finnas ett lättare sätt? Kör VB 2005 (med .NET 2.0 om det gör någon skillnad)

(Disclaimer: Jag har programmerat vb i hela 6 timmar nu, så jag kan missa någonting uppenbart. Om det är så, upplys mig gärna ;) )

Medlem sedan jan. 20021 122 inlägg
#2

Det går inte att komma undan att använda en tråd för att skriva till textarean, men det går att göra lättare. Så här löste jag det för att skriva en byte-ström till en textarea:

Public Class Main
 Private Delegate Sub setTextArea(ByVal input() as Byte)
 ' ...
 Private Sub comPort_DataReceived( ... )
  ' ...
  Dim textSetter As setTextarea = Nothing
  ' Välj vilken sub som ska skriva beroende på kommandosvar
  ' ...
  If textSetter IsNot Nothing Then
   Me.invoke(textSetter, New Object() { response })
  Else
   ' Felhantering
  End If
  ' ...
 End Sub

 ' Såhär ser en setTextArea-sub ut
 Private Sub setStatusTA(ByVal input() As Byte)
  dim output As String
  ' initieringar och strängformatering
  Status.Text = output
 End Sub
End Class

Betydligt enklare än exemplet på msdn, men jag tycker inte det verkar som om jag missar något

Medlem sedan juni 200032 967 inlägg
#3

.NET-frågor passar i .NET-forumet.
Flyttas från VB alltså.

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)