c#如何从主窗体以外的类中引发事件以启动定时器

本文关键字:事件 定时器 启动 窗体 | 更新日期: 2023-09-27 18:07:28

在我的主Form1中,我有

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

在其他地方,(特别是我用于UDP侦听器的类),我运行一个事件来引用表单

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

然后,当传入的数据符合我的标准时,我会尝试调用它

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?
          });
    }
}

像我的表单的其他组件,我可以引用它与_form,但timer1_Tick是一个方法(void)。有办法做到这一点吗?

c#如何从主窗体以外的类中引发事件以启动定时器

找到解决方案。我只是用这个教程来帮助我https://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick(v=vs.110).aspx

在我的另一个类,我有:

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

我引用它到

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