2016-09-16 8 views
-1

In meinem Haupt Form1, ichC# Wie kann ein Ereignis ausgelöst werden, um den Timer von einer anderen Klasse als dem Hauptformular zu starten?

int duration = 5; 
public void timer1_Tick(object sender, EventArgs e) 
{ 
    duration--; 
    if (duration == 0) 
    { 
     timer1.Stop(); 
     MessageBox.Show("timesup"); 
    } 
} 

In anderen Ländern haben, (speziell der Klasse I für meine UDP-Listener verwenden), betreibe ich ein Ereignis Änderungen an der Form zu referenzieren

private MyProject.Form1 _form { get; set; } 
public UDPListener(TapeReader.Form1 form) 
{ 
    _form = form; 
} 

Dann würde ich versuchen, es zu rufen, wenn die eingehenden Daten meine Kriterien erfüllt

if (numberSize>paramSize) 
{ 
    if (_form.listBox1.InvokeRequired) 
    { 
      _form.listBox1.Invoke((MethodInvoker)delegate() 
      { 
       //Below is where I would like the timer to start 
       _form.timer1.Start(); 
       //This won't work as I need the timer1_Tick from the main. How can I run this from a different class other than the main form? 
      }); 
    } 
} 

Wie die anderen Komponenten meiner Form, kann ich darauf verweisen fein mit _form aber timer1_Tick ist eine Methode (void). Gibt es eine Möglichkeit, dies zu tun?

+1

Ich verstehe nicht, warum Sie benötigen 'timer1_Tick' in dieser anderen Methode? –

+0

Warum rufen Sie auch 'timer1.Start();' _inside_ den Timer-Tick-Handler? – DGibbs

+0

Auch "timer1.Enabled = true;" und "timer1.Start();" ist das gleiche. – LarsTech

Antwort

0

Eine Lösung gefunden. Ich habe nur dieses Tutorial mich in meinen anderen Klasse https://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick(v=vs.110).aspx

zu helfen, ich habe:

_form.timer1.Tick += new EventHandler(TimerEventProcessor); 

und ich darauf verweisen auf

int duration = 5; 
    private void TimerEventProcessor(object myObject, EventArgs myEventArgs) 
    { 
     duration--; 
     if(duration==0) 
     { 
      MessageBox.Show("timesup"); 

     } 
    } 
Verwandte Themen