Allora... scrivo questo post perché mi trovo in difficoltà a capire un fenomeno molto strano che mi è capitato programmando una windows form application.
Allora... prima spiego a parola e poi metto i codici.
Io ho una finestra su cui ho 2 bottoni e una classe di nome Connessione (Il nome centrerà per una cosa che dovrò fare dopo... non badate ad esso).
La classe Connessione contiene 2 metodi e una variabile. La variabile privata è string passa. Il primo metodo,
(public void connetti() ) semplicemente assegna alla variabile una frase, ovvero "ha funzionato!!!!!". il secondo metodo (public void pruva()), fa uscire una MessageBox con il contenuto di passa.
Ora passiamo alle azioni dei pulsanti.
Al click del primo pulsante, il programma crea un oggetto di Connetti, e poi avvia il Thread threadConn del metodo public void connetti (per capirci apre il thread che cambierà il valore della variabile in "ha funzionato!!!!!"). Il secondo bottone, invece crea sempre l'oggetto di Connetti, ma il suo thread (Thread t) fa partire il metodo che apre un MessageBox con il contenuto di prova.
Ora... ecco cosa pensavo di fare:
1) schiaccio il primo bottone, quindi assegno a prova il valore di "ha funzionato!!!!!".
2) schiaccio l'altro bottone ed esce il MessageBox con scritto "ha funzionato!!!!!".
invece... il MesasgeBox esce con nessuna scritta, ovvero la variabile non è stata cambiata.
Tuttavia provando a fare i due processi all'interno dell'evento di un solo bottone, esce la scritta
"ha funzionato!!!!!".
Ora vi posto i codici
Form1.cs
ora la classe Connessionecodice:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace Server { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void connettiBtn_Click(object sender, EventArgs e) { Connessione conn = new Connessione(); Scrivi scrivi = new Scrivi(); Thread threadConn = new Thread(conn.connetti); threadConn.Start(); } private void inviaBtn_Click(object sender, EventArgs e) { Connessione conn = new Connessione(); Thread t = new Thread(conn.pruva); t.Start(); } } }
Quale è il problema??????codice:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace Server { class Connessione { string passa; public void connetti() { passa = "ha funzionato!!!!!"; } public void pruva() { MessageBox.Show(passa); } } }
Grazie molte, sto impazzendo, infatti ho avuto lo stesso problema con java e in tutti e due tentavo di costruire un server e un socket che comunicassero, per quanto riguarda le console application sono riuscito a generare una buona chat, ma quando ho tentato di farle grafiche in tutti e due i linguaggi ho avuto il medesimo problema... come posso fare a modificare quella dannata variabile? (che poi sarebbe in realtà il Tcpclient di entrata)???

Rispondi quotando
