在c#中挂起线程一段固定的时间间隔
本文关键字:一段 时间 挂起 线程 | 更新日期: 2023-09-27 18:15:46
这是我的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应用程序本身中执行"长时间运行的任务"。