我正在开发一个程序,需要从其他线程激活计时器。我将代码简化为以下示例。
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();
}
}
即使我必须在适合我的类中编写计时器代码,但我也尝试过这样做,但它也不起作用,即计时器没有启动,并且没有任何内容输出到控制台。
最佳答案
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();