1

我需要的是让计时器触发另一个类中的事件处理程序(比如每秒)。这将是 Windows 窗体程序的一小部分。

我曾尝试使用委托来“调用”事件处理程序,但我不断收到语法错误。有人可以通过一个简单的代码示例引导我走向正确的方向吗?

下面的代码是我的开始,注释部分工作正常,但我希望在 Windows 计时器触发时触发事件。

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public event TimerHandler Tick;
        public EventArgs e = null;
        public delegate void TimerHandler(Timer t, EventArgs e);

        public class Timer
        {
            public event TimerHandler Tick;
            public EventArgs e = null;
            public delegate void TimerHandler(Timer t, EventArgs e);
        }

        public class Listener
        {
            public static int ticker = 0;
            public void Subscribe(Timer t)
            {
                t.Tick += new Timer.TimerHandler(HeardTick);
            }
            private void HeardTick(Timer t, EventArgs e)
            {
                //lblTimer.Text = ticker.ToString(); //Don't know how to change forms control
                ticker++;
            }
        }

        private void btnStart_Click_1(object sender, EventArgs e)
        {
            Timer t = new Timer();
            Listener l = new Listener();
            l.Subscribe(t);
            //t.Start();
        }

        public void timer1_Tick(object sender, EventArgs e)
        {
            if (Tick != null)
            {
                Tick(this, e); // "this" is incorrect, invalid argument
            }
        }
    }
}
4

1 回答 1

1

另一个类是静态的吗?以下是每个示例:

//Static class
Timer1.Tick += YourClass.DoStuff;

//Non-static class
YourClass MyInstance = new YourClass();
Timer1.Tick += MyInstance.DoStuff;

只需将代码放在表单的构造函数中即可。

于 2013-10-07T03:36:43.920 回答