|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
[c#] domanda semplice: Come agggiornare una textbox?
Ciao
Ho scritto un programma in c#. Ho delle textbox, che in tutti gli altri programmi fatti le aggiornavo solo con un textbox.text = "qui metto la frase"; Ora ho un programmino così fatto: private void BottoneStart_Click(object sender, EventArgs e) { textbox.text = "Ciao"; while (true) { qui il while fa delle cose all'infinito perchè l'utente ha premuto il bottone, e deve farle fino alla chiusura } } ebbene il semplice problema è che il textbox non viene scritto con "ciao". Se però ad un certo punto metto un brack dentro il while (cioè esce dal while), allora mi aggiorna la scritta. Come mai?
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2005
Città: Roma
Messaggi: 216
|
Perchè aggiorna la textbox all'uscita dal metodo, quindi alla fine del while...ma siccome il while è true...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
noooooooooooo. Non c' è modo di ovviare?
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Sep 2001
Città: pisa
Messaggi: 70
|
Prova così....
Codice:
private void BottoneStart_Click(object sender, EventArgs e){
this.textBox.Text="ciao";
this.textBox.Refresh();
while(true)
{}
}
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
Quote:
Ne approfitto per chiedervi un altra cosina (sto passando a c# dall'asse,bler e dal c puro, quindi trovo qualche problemino)..... ho creato un appliczione multi-trheaded. Ma se da un thread provo ad aggiornare una textbox (ad esempio), dice il debugger (uso visual c#), che sto accedendo al controllo da un thread diverso da quello di creazione. Ma come posso risolvere? In c avrei messo un bel puntatore e via, ma c# non lo permette....
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Sep 2001
Città: pisa
Messaggi: 70
|
class BackgroundWorker
Questo è più complicato da spiegare La cosa migliore è vedere la documentazione microsoft http://msdn2.microsoft.com/it-it/lib...t2(VS.80).aspx |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
Quote:
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
Quote:
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
ho infatti provato ad usare il BackgroundWorker, mettendo in BackgroundWorker_completed la textbox.text = "CIAO";. Ma dà sempre lo stesso errore.
ecco il programma che da erroer, privato delle funzioni inutili Codice:
namespace WindowsApplication1
{
public partial class Form1 : Form
{
SerialPort seriale = new SerialPort("COM3", 4800, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Textbox.Text = "CIAO";
}
private void BottoneStart_Click(object sender, EventArgs e)
{
seriale.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
seriale.Open();
}
}
}
__________________
Ho fatto affati con.... troppi Ultima modifica di giova22 : 12-11-2007 alle 16:58. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
uppino
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2001
Città: pisa
Messaggi: 70
|
Il componente backgroundWorker è lanciato dal form principale.
In modo che possa poi aggiornare la textbox Codice:
namespace WindowsApplication1{
public partial class Form1 : Form{
SerialPort seriale = new SerialPort("COM3", 4800, Parity.None, 8, StopBits.One);
public Form1(){
InitializeComponent();
}
// lavoro fatto in background
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e){
BackgroundWorker bw = sender as BackgroundWorker;
int arg = (int)e.Argument;
seriale.DataReceived += new serialDataReceivedEventHandler(port_DataReceived);
// e.result prende il risultato dell'operazione
e.Result = seriale.Open();
}
private void backgroundWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e){
Textbox.Text = "CIAO";
}
private void BottoneStart_Click(object sender, EventArgs e)
{
// par se vuoi passare parametri
this.backgroundWorker1.RunWorkerAsync(par);
// il componente background lavora su un thread separato
}
//textbox da aggiornare
private System.Windows.Forms.TextBox textBox1;
private System.ComponentModel.BackgroundWorker backgroundWorker;
}
}
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
Quote:
Stasera quando torno a casa provo. Ti ringrazio davvero. Se c' è un modo per sdebitarmi dimmelo. Grazie ancora
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
ciao
Ho provato, ma mi dice: Codice:
Errore 5 'WindowsApplication1.Form1' does not contain a definition for 'backgroundWorker1'
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Sep 2001
Città: pisa
Messaggi: 70
|
hai due scelte
Cambiare backgroundWorker1 in backgroundWorker oppure tutti i backgroundWorker in backgroundWorker1 hai definito il componente Codice:
private System.ComponentModel.BackgroundWorker backgroundWorker; Codice:
private void BottoneStart_Click(object sender, EventArgs e)
{
// par se vuoi passare parametri
this.backgroundWorker1.RunWorkerAsync(par);
// il componente background lavora su un thread separato
}
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5953
|
Quote:
ok grazie ancora. Ora non ti disturberò più. Promesso. Ciao
__________________
Ho fatto affati con.... troppi |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:09.




















