在c#中挂起线程一段固定的时间间隔



这是我的CS

protected void timer_Tick(object sender, EventArgs e)
    {
        lblNum.Text = string.Format("{0:dd:MM:yyyy hh:mm:ss}", DateTime.Now);
        if (DateTime.Now.Second == 30)
        {
            Thread t = new Thread(DisplayImages);
            t.Start();
            //t.Suspend();
            t.Join();
        }
    }

我想等待线程t一段固定的时间间隔,使我的主线程保持不变。在这段时间之后,我想在线程t.中做一些事情

我试过了t.Sleep((,但没有用,因为Sleep是静态的。

更新:

请参阅我现有的问题。这个问题就是其中的一部分。我的主线有一个我不想停下来的股票行情。所以我不能使用Thread.Sleep((,因为它可能会冻结主线程。

EDIT:考虑到这是ASP.NET,您尝试做的事情是否有意义还不清楚。很可能您实际上想要客户端(Javascript(延迟。你还没有真正告诉我们你想要达到什么效果,但我强烈怀疑,一旦你开始考虑请求/响应时间,在服务器端等待30秒才显示图像的想法真的不起作用。。。你要么会延迟整个响应,要么在你尝试显示图像时已经发送了。把延迟放在客户端更有意义。

在创建一个从睡眠开始的线程实际上是有意义的情况下

我想等待线程t一段固定的时间间隔,使我的主线程保持不变。在这段时间之后,我想在线程t.中做一些事情

听起来你只想从另一个创建一个ThreadStart,它休眠然后执行原始的:

public static ThreadStart CreateDelayedThreadStart(ThreadStart original,
                                                   TimeSpan delay)
{
    return () =>
    {
        Thread.Sleep(delay);
        original();
    };
}

然后:

Thread t = new Thread(CreateDelayedThreadStart(DisplayImages,
                                               TimeSpan.FromSeconds(30));
t.Start();

您应该不要使用Thread.Join,因为这会阻塞调用线程。

请注意,我不认为将任务安排在30秒内开始是最好的方式。我建议你考虑使用TPL。。。

您可以使用方法Thread.Sleep。这可以在线程执行的上下文中调用。

而且,注意到ASP.NET标签后,我倾向于同意Jon的观点(好像我无论如何都不会这么做!(。在ASP.NET中,不希望像这样进行多线程处理。相反,可以考虑将逻辑提取到适当的介质中,例如Windows服务或任务。

您不希望在web应用程序本身中执行"长时间运行的任务"。