Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-08-2012, 22:41   #1
82_marco
Junior Member
 
Iscritto dal: Aug 2012
Messaggi: 7
C# passare delle variabili ad un evento

Ciao a tutti,
Sono nuovo del forun,
Il mio problema e' questo: Devo passare 2 variabili ad un evento contenuto in una classe, ma non riesco a capire come fare.

il mio evento e' questo:
Codice:
        private void EventoTimerD(object stateInfo)
        {
            Diztimer[NumeroTemporizzatore].Dispose();
            Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "0";
        }
L' ambiente di sviluppo dice che DizTimer e NumeroTemporizzatore non esistono nel contesto corrente, per questo vorrei sapere se e' possibile passarle quando dichiaro l' evento, cioe' qua:

Codice:
       System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, null, Tempo, Tempo);
o se non e' possibile vorrei sapere come posso fare per togliermi questi errori.

Vi ringrazio per l' aiuto che sicuramente ricevero'
82_marco è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 09:13   #2
Dânêl
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 485
il parametro state del costruttore del timer può essere utilizzato per passare informazioni alla funzione richiamata (il tuo EventoTimerD).
Quindi, invece di utilizzare
Codice:
System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, null, Tempo, Tempo);
dovresti utilizzare
Codice:
System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, TUOOGGETTO, Tempo, Tempo);
con TUOOGGETTO un oggetto che conterrà DizTimer e NumeroTemporizzatore. Infine avrai qualcosa del tipo:

Codice:
private void EventoTimerD(object stateInfo)
        {
            TUOOGGETTO state = (TUOOGGETTO) stateInfo;

            state.Diztimer[state.NumeroTemporizzatore].Dispose();
            Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "0";
        }
Anche se non è possibile giudicare dalle poche righe di codice riportate, penso (ma potrei sbagliarmi) che sia consigliabile rimuovere il Diztimer[NumeroTemporizzatore] dopo averne fatto il Dispose per non rischiare di farvi riferimento in seguito.

Ultima modifica di Dânêl : 07-08-2012 alle 09:18.
Dânêl è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 18:01   #3
82_marco
Junior Member
 
Iscritto dal: Aug 2012
Messaggi: 7
Ciao, che tipo di oggetto posso utilizzare per questo scopo?
Cioe' mi puoi mostrare come inseriresti i 2 valori al suo interno?

la mia classe completa e' questa
Codice:
namespace WindowsFormsApplication1
{
    class GestioneTemporizzatori
    {

        byte[] AppoggioTemporizzatoriC = new byte[1000];
        
        public void GestisciTemporizzatore(char risultato, byte[] AppoggioTemporizzatori, Dictionary<int, System.Threading.Timer> Diztimer)
        {
            int NumeroTemporizzatore = int.Parse(Form1.RigaDaGestire.Substring(48, 3));            

            if (risultato == '1' && AppoggioTemporizzatori[NumeroTemporizzatore] == 0)
            {
                CreaTemporizzatore(Diztimer, NumeroTemporizzatore);
                AppoggioTemporizzatori[NumeroTemporizzatore] = 1;
            }
            else if (risultato == '0' && AppoggioTemporizzatori[NumeroTemporizzatore] == 1)
            {
                    CancellaTemporizzatore(Diztimer, NumeroTemporizzatore);
                    AppoggioTemporizzatori[NumeroTemporizzatore] = 0;
                    Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "0";
            }
        }

        public void CreaTemporizzatore(Dictionary<int, System.Threading.Timer> Diztimer, int NumeroTemporizzatore)
        {
            int Tempo = (int.Parse((Form1.RigaDaGestire.Substring(59, 5))) * 1000);

            switch (Form1.RigaDaGestire.Substring(54, 1))
            {
                case "B" :
                    System.Threading.Timer timerB = new System.Threading.Timer(EventoTimerB, null, Tempo, Tempo);
                    Diztimer.Add(NumeroTemporizzatore, timerB); // Inserisco il timer in un dizionario in modo da poterlo rintracciare
                    break;
                case "C" :
                    //AppoggioTemporizzatoriC[NumeroTemporizzatore] = 1;
                    //Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "1";
                    //if (AppoggioTemporizzatoriC[NumeroTemporizzatore] == 1)
                    //{
                    //    System.Threading.Timer timerC = new System.Threading.Timer(EventoTimerC, null, Tempo, Tempo);
                    //    Diztimer.Add(NumeroTemporizzatore, timerC);
                    //}
                    break;
                case "D" :
                    System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, null, Tempo, Tempo);
                    Diztimer.Add(NumeroTemporizzatore, timerD);
                    Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "1";
                    break;
            }
        }

        public void CancellaTemporizzatore(Dictionary<int, System.Threading.Timer> Diztimer, int NumeroTemporizzatore)
        {
            if (Diztimer.ContainsKey(NumeroTemporizzatore))
            {
                Diztimer[NumeroTemporizzatore].Dispose();
                Diztimer.Remove(NumeroTemporizzatore);
            }
        }

// Eventi timer

        private void EventoTimerB(object stateInfo)
        {
            //Diztimer[NumeroTemporizzatore].Dispose();
            //Diztimer.Remove(NumeroTemporizzatore);
            Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "1";
        }

        //private void EventoTimerC(object stateInfo)
        //{
        //    Diztimer[NumeroTemporizzatore].Dispose();
                 //       Diztimer.Remove(NumeroTemporizzatore);
        //    Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "0";
        //    AppoggioTemporizzatoriC[NumeroTemporizzatore] = 0;
        //}

        private void EventoTimerD(object stateInfo)
        {
           // Diztimer[NumeroTemporizzatore].Dispose();
           // Diztimer.Remove(NumeroTemporizzatore);
            Form1.Temporizzatori[int.Parse(Form1.RigaDaGestire.Substring(48, 3))] = "0";
        }
    }
}

Ultima modifica di 82_marco : 07-08-2012 alle 18:28.
82_marco è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 18:23   #4
Dânêl
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 485
Niente di esoterico. Un semplicissimo
Codice:
class esempio
{
      public List<tipo> Diztimer;
      public int NumeroTemporizzatore;

     public esempio(tipo dizTimer, int numero)
     {
           this.DizTimer = dizTimer;
           this.NumeroTemporizzatore = numero;
     }
}
Ovviamente sostituendo a <tipo> il tipo di oggetti contenuti in Diztimer ed eventualmente sostituendo la lista con la struttura dati da te utilizzata

Ultima modifica di Dânêl : 07-08-2012 alle 18:47.
Dânêl è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 18:31   #5
82_marco
Junior Member
 
Iscritto dal: Aug 2012
Messaggi: 7
aspetta, sto facendo confusione

Sulla classe che ho postato prima dove creo l'oggetto?
82_marco è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 18:53   #6
Dânêl
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 485
Avendo ora il codice la soluzione immediata sarebbe di definire la classe d'esempio, che ti ho riportato prima, all'interno del namespace e, in creaTemporizzatore, scrivere cosi:

Codice:
System.Threading.Timer timerB = new System.Threading.Timer(EventoTimerB, 
 new Esempio(DizTimer, NumeroTemporizzatore),
Tempo, 
Tempo);
ripetendo l'operazione per C e D
Dânêl è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 19:07   #7
82_marco
Junior Member
 
Iscritto dal: Aug 2012
Messaggi: 7
Purtroppo adesso mi e' impossibile provare perche' sto partendo per 2 giorni.... appena rientro provo e poi ti dico come va, in tanto ti ringrazio
82_marco è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2012, 23:43   #8
82_marco
Junior Member
 
Iscritto dal: Aug 2012
Messaggi: 7
Sembra funzionare :-) grazie di tutto
82_marco è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
OpenAI taglia i prezzi di due modelli GP...
RTX Spark pronto a dominare anche i tabl...
Il primo telefono davvero senza bordi no...
DeepSeek V4-Flash, API in beta pubblica:...
La crisi delle memorie continuerà: ecco ...
Dati su disfunzione erettile e perdita d...
Arriva e-invoice, il servizio di fiskaly...
Champions League, F1 e MotoGP: ecco la p...
Amazon alza a 220 miliardi le stime sugl...
World of Warcraft e Dungeons & Drago...
AXOL Server ridisegna l'infrastruttura d...
MSI ha ucciso AMD EXPO ULL? High-Efficie...
Falso Portale dell'Automobilista ruba pa...
Apple chiude il miglior trimestre di giu...
Sony tira dritto sull'addio ai dischi Pl...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v