Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
TextBox che non viene riempita
sabato 19 settembre 2009 - 10.08
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
boc_babi
Profilo
| Junior Member
52
messaggi | Data Invio:
sab 19 set 2009 - 10:08
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
1.077
messaggi | Data Invio:
sab 19 set 2009 - 10:20
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
52
messaggi | Data Invio:
sab 19 set 2009 - 11:17
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
28
messaggi | Data Invio:
lun 21 set 2009 - 10:24
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
Torna su
Stanze Forum
Elenco Threads
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 !