|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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";
}
Codice:
System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, null, Tempo, Tempo); Vi ringrazio per l' aiuto che sicuramente ricevero' |
|
|
|
|
|
#2 |
|
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); Codice:
System.Threading.Timer timerD = new System.Threading.Timer(EventoTimerD, TUOOGGETTO, Tempo, Tempo); 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";
}
Ultima modifica di Dânêl : 07-08-2012 alle 09:18. |
|
|
|
|
|
#3 |
|
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. |
|
|
|
|
|
#4 |
|
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;
}
}
Ultima modifica di Dânêl : 07-08-2012 alle 18:47. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Aug 2012
Messaggi: 7
|
aspetta, sto facendo confusione
Sulla classe che ho postato prima dove creo l'oggetto? |
|
|
|
|
|
#6 |
|
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); |
|
|
|
|
|
#7 |
|
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
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Aug 2012
Messaggi: 7
|
Sembra funzionare :-) grazie di tutto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:17.



















