【问题标题】:Suspending a thread for a fixed interval in c#在c#中将线程暂停一个固定的时间间隔
【发布时间】:2013-05-28 12:27:51
【问题描述】:

这是我的 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() 是静态的。

更新:

查看我现有的question。这个问题是其中的一部分。我的主线程有一个我不想停止的代码。所以我不能使用 Thread.Sleep() 因为它可能会冻结主要的。

【问题讨论】:

  • 为什么不以Thread.Sleep(30000); 开头DisplayImages()
  • 好的,我明白你想要什么。是什么阻止你这样做?
  • 为什么要关闭?有什么原因吗?
  • 不要乱用 ASP.NET 中的线程或计时器。不管你想要什么,你现在都走错了路。
  • @AmitRanjan:正如其他人所说,性能不是问题。您只是对问题采取了错误的方法。您尝试做的事情行不通。请看道理,把延迟放在客户端。

标签: c# asp.net .net multithreading


【解决方案1】:

编辑:鉴于这是 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...

【讨论】:

  • 终于引起了大师的注意。我在等待。我会按照你告诉我的方式进行。 :)
  • 这在服务器端的 ASP.NET 中会有多大用处?你正在帮助 OP 在他的脚上钻一个洞。
  • @HenkHolterman:因此是最后一句话。如果您愿意,我可以将其移至顶部...
  • 是的,它应该在所有复制/粘贴诱饵之前。或者而不是
  • @HenkHolterman:查看编辑。我认为对于其他有意义的情况,其余的答案可能仍然有用。
【解决方案2】:

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

而且,在注意到 ASP.NET 标记后,我倾向于同意 Jon 的观点(好像无论如何我都不会同意!)。在 ASP.NET 中,您希望成为这样的多线程。而是考虑将逻辑提取到适当的介质中,例如 Windows 服务或任务。

You don't want to do 'long running tasks' in the web app itself.

【讨论】:

  • @AmitRanjan 我明白了,请不要这样做。
  • 我知道,但我的客户说我需要这样一个。并且应用程序负载小于或等于0。每天几乎没有1-2个用户。所以他并不关心应用程序的性能。所以我们太不关心应用的性能了。
  • @AmitRanjan 这与性能无关,这只是表明您对手头的东西缺乏经验,而且 很危险。
猜你喜欢
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多