阻止线程结束

本文关键字:结束 线程 | 更新日期: 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来延迟执行。我看你已经明白了。另一个想法是使用计时器,但不是从工作线程启动它,而是从主线程启动它。在这里,您实际上根本不需要手动创建线程。