Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [c#] problema con modifica di variabili

    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

    codice:
    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();
            }
        }
    }
    ora la classe Connessione

    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);
             }
        }
    }
    Quale è il problema??????


    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)???
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Le due conn non sono la stessa cosa ... sono due istanze diverse create localmente ai due eventi click ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    e come faccio a risolvere il problema? C'è un modo con cui posso fare la cosa che mi ero proposto di fare?
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il fatto è che non ho capito bene cosa ti sei proposto di fare ...

    Comunque, se operi con una sola istanza

    codice:
    public partial class Form1 : Form
    {
       Connessione conn;
    
       public Form1()
       {
           InitializeComponent();
           
          conn = new Connessione();
       } 
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    adesso spiego bene che cosa mi sono proposto di fare:

    avrei questa finestra con 2 bottoni, quando schiaccio il primo, assegno ad una variabile string parola, una stringa,per esempio "ciao" attraverso il primo metodo. Quando schiaccio il secondo bottone attivo il metodo che mi fa uscire una MessageBox con scritto il contenuto di parola. Ora... sia il metodo che modifica la variabile che il metodo che fa apparire la messagebox devono essere contenuti nella stessa classe, ed entrambi vengono invocati come thread. Quando schiaccio il primo bottone si avvia il primo thread (il metodo che dà il valore alla string) e quando schiaccio il secondo pulsante, attivo l'altro thread, ovvero il metodo che scrive all'interno della messagebox il contenuto della variabile parola(il quale è stato cambiato dal metodo invocato col primo bottone, ma a quanto pare stranamente il secondo pulsante mi stampa la messagebox vuota, come se il primo metodo non avesse modificato la variabile).

    E' ovvio che ci sarebbe un metodo molto più veloce per ottenere l'output, ma a me server proprio questo perché poi dovrò fare una cosetta coi socket e mi servirà passare come parametro il client. Non metto il progetto dei socket perchè è troppo lungo, per questo ho messo questo esempio.

    Quindi mi servirebbe capire come fare questo passaggio utilizzando questo schema...


    Grazie per l'attenzione...


    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ti ho spiegato perché il valore ti appare non valorizzato (hai due istanze e ne devi usare una sola).

    La questione dei thread non è chiara ... secondo me ti manca una buona formazione di base relativa all'OOP e probabilmente tenti di creare un' "architettura" non proprio corretta anche a causa di tale mancanza ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    grazie mille, grazie a te sono riuscito a risolvere, ho creato solo un oggetto e tutto ha funzionato a meraviglia... chissà perchè non lo avevo capito, eppure me lo continuavate a dire...

    Cmq grazie mille
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.