TextBox che non viene riempita

sabato 19 settembre 2009 - 10.08

boc_babi Profilo | Junior Member

OPS, il titolo non è corretto, ma non so come cambiarlo

Ciao a tutti,
sono alle primissime armi con VB.NET quindi abbiate pazzienza per la domanda probabilmente banale
In un modulo salvo in una variabile pubblica String i dati che mi arrivano da seriale.
Se provo a visualizzare questi dati tramite un MsgBox non ci sono problemi, se invece attribuisco questi dati alla proprietà Text di una Label presente nel form principale, la Label non viene aggiornata.

Ringrazio anticipatamente chi abbia la pazzienza di darmi una risposta.

BOC

luigidibiasi Profilo | Guru

il form rimane bloccato durante la ricezione dei dati? ( hai creato un thread di ascolto oppure gira tutto su un thread principale in un ciclo?)

Se non hai creato thread secondari oltre a settare la proprietà text utilizza

application.doevents dopo averla settata oppure textbox1.refresh ( nel caso in cui la textbox si chiama textbox1)


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

boc_babi Profilo | Junior Member

Grazie per la risposta.

Ho provato sia con Refresh che con Application.DoEvents() ma non cambia nulla.

Utilizzo solo un thread (devo ancora capire come utilizzarne più di uno )

Grazie.

slavishdany Profilo | Newbie

beh se usi un thread solo quando usi l'istruzione port.open si dovrebbe inchiodare tutto e non vedi nulla ne sulle label ne sulle textbox, dovresti vedere qualcosa quando chiudi la connessione con la porta, se poi usi un ciclo di lettura finchè non legge tutti i dati sulla porta non vedrai nulla.
Prova con un altro thread, ah fai attenzione che se usi due thread non devi usare solo la proprieta text ma devi usare il comando invoke con una variabile "delegata", uso un esempio così capisci cio che intendo :

publlic class form1
Private variabile As MrDelegato = AddressOf AddTesto
dim por as new io.ports.SerialPorts

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork ' questo oggetto crea un nuovo thread che lavora in background
dim dati as string=""
with por
.portname="COM13"
.readtimeout=infinitetimeout
.Baudrate=9600
end with
por.open
while por.isopen
dati=por.readline
mybase.invoke(variabile,dati)
end while
por.dispose
end sub
Private Sub AddTesto(ByVal i As String)
Me.label1.text=i
end sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
BackgroundWorker1.runworkerasync()
end sub
end class


Il background worker e un oggetto che in visualstudio hai nella barra degli strumenti che trascini nel form
Spero di essere stato utile
Ciao buona giornata
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5