无法从其他线程启动计时器

时间:2016-07-11 17:30:56

标签: c#

我正在开发一个程序,我需要从不同的线程激活一个计时器。我已将代码简化为以下示例。

static class Program
{
    public static System.Windows.Forms.Timer TimerVideo = new System.Windows.Forms.Timer();

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        TimerVideo.Interval = 1000;
        TimerVideo.Tick += new EventHandler(TimerVideo_Tick);
        new Thread(() =>
        {
            test RunTimer = new test();
            RunTimer.StartTimer();

        }).Start();

    Application.Run();
    }

    private static void TimerVideo_Tick(object sender, EventArgs e)
    {
        Console.WriteLine("Running");
    }
}

class test
{
    public void StartTimer()
    {
        Program.TimerVideo.Start();
    }
}

即使我必须在课堂上对计时器进行编码对我没问题,但我确实尝试过,但它也没有用,即计时器没有触发,也没有打印到控制台。

2 个答案:

答案 0 :(得分:5)

System.Windows.Forms.Timer旨在从UI线程运行。如果您想要一个在不同线程上触发的计时器,您可以使用System.Timers.Timer,例如:

TimerVideo = new System.Timers.Timer();
TimerVideo.Interval = 1000;
TimerVideo.Elapsed += (o, e) => Console.WriteLine("Running");
TimerVideo.Start();

答案 1 :(得分:-2)