阻止线程结束
本文关键字:结束 线程 | 更新日期: 2023-09-27 18:13:24
我明白当所有的代码被分配完成时,线程将终止,但是我如何才能使它停留在等待事件?下面是我的代码的一个简单的外观,以便您可以更好地理解我的问题是什么:
public static class TimeUpdater
{
static TimeUpdater()
{
//Initialize the Timer object
timer = new Timer();
timer.Interval = 1000;
timer.Tick += timer_Tick;
}
public static void StartTimer()
{
timer.Start();
}
private static void timer_Tick(object sender, EventArgs e)
{
//Do something
}
}
在主线程中,我是这样调用这些方法的:
Thread timeThread = new Thread(TimeUpdater.StartTimer);
timeThread.Name = "Time Updater";
timeThread.Start();
它所做的是进入StartTimer()
方法,运行它,然后线程终止,而不进入timer_Tick
事件处理程序。如果我从主线程调用StartTimer()
,它工作正常。
有人能发现问题吗?欢呼。
您在一个单独的线程上启动计时器。启动计时器是一个非常快的操作。这就是线程立即完成的原因。当时间到期时,在线程池上异步启动Tick事件。
如果你想让线程等待某事,那么你应该在线程过程中插入代码来等待某事。此时此刻,你不必等待任何事情。
如果你想运行定时器过程,只需调用它
显然我不需要使用Timer
对象。下面是我是怎么做的:
public static void StartTimer()
{
while (true)
{
UpdateTime();
Thread.Sleep(1000);
}
}
谢谢大家的帮助!
在您的StartTimer
方法中,您可以围绕无限循环旋转并在需要时调用Thread.Sleep
来延迟执行。我看你已经明白了。另一个想法是使用计时器,但不是从工作线程启动它,而是从主线程启动它。在这里,您实际上根本不需要手动创建线程。