相关疑难解决方法(0)

如何添加延迟2或3秒

如何在C#中为程序添加延迟?

c# delay

119
推荐指数
4
解决办法
47万
查看次数

Thread.Sleep()的替代方案,用于模拟暂停

所以Thread.Sleep()很糟糕(http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx).

是否有任何建议的替代方法来模拟程序执行中的暂停?比如一个循环?虽然我认为这在初始化变量,检查bool条件等方面涉及很多开销.

谢谢

c#

20
推荐指数
3
解决办法
6530
查看次数

使用Thread.Sleep进行等待的替代方法

首先,我不是要问与C#相同的问题- Thread.Sleep的替代方案?,或替代在C#中的Thread.Sleep?.我不认为我使用它不正确,需要一个真正的替代特定情况.

在代码分析运行期间,我看到了一个令人惊讶的违规行为:

Thread.Sleep()的使用是有缺陷设计的标志.

这种违规导致了彼得里奇关于为什么这构成糟糕设计的文章.

我们都知道线程创建很昂贵,线程中的阻塞意味着池上的争用.我们也知道每个线程将分配一个兆内存,因此它应该有一个短的寿命,在UI上阻塞是邪恶的,使用睡眠时间是不可靠的等等.这导致我的观点,如果你真的需要执行睡觉,如果不是Thread.Sleep你应该使用什么?

Peter继续提到零睡眠是Thread.Sleep唯一正确使用放弃线程的时间片并允许其他线程处理的唯一正确用法.然后更可怕的是,这仅仅是因为非托管线程的限制,如果在CLR中重新实现将产生在应用程序中使用Thread.Sleep的副作用.事实上,常见的不良用法的所有要点都是不良用法的好例子.

我在生产代码中有以下情况,使用Thread.Sleep非常成功:

  • 等待文件锁被操作系统放弃(捕获文件锁定问题,等待一秒钟,再试一次,一段时间后放弃).
  • 杀死一个进程并等待它不显示在进程列表中(杀死它,检查它没有运行,等待一秒,检查它是否仍在运行,强行关闭它).
  • 等待复制缓冲区刷新(检查文件大小,尝试访问它,等待,检查大小是否已更改).

在这种情况下不使用Thread.Sleep,我还有其他选择吗?紧密的循环往往会让事情变得更糟,我不相信这会使它的使用变成"设计缺陷",尤其是因为UI上没有任何东西,只有后台线程.在多线程环境中等待其他事物以及影响代码的外部因素,这只是软件的本质,有时您需要等待......

c# multithreading wait thread-sleep

17
推荐指数
1
解决办法
1万
查看次数

计时器[延迟而不冻结应用程序!] C#

我正在尝试创建一个每10分钟执行10个不同SQL查询的应用程序,并且在每个SQL查询之间应该有一个短暂的延迟(例如,1秒).

如果我尝试使用Thread.Sleep(1000);,其他计时器停止,整个应用程序冻结.

知道如何在不冻结应用程序或停止其他计时器的情况下执行此操作吗?

c#

0
推荐指数
1
解决办法
741
查看次数

标签 统计

c# ×4

delay ×1

multithreading ×1

thread-sleep ×1

wait ×1