Tag: thread sleep

Thread.Sleep会妨碍其他线程吗?

这是一个控制台程序,希望10个线程批量启动,等待5秒,然后批量停止。 static void Main(string[] args) { System.Threading.Tasks.Parallel.For(0, 10, (index) => { Action act = (i) => { Console.Write(“start {0} “, i); Thread.Sleep(5000); }; act.BeginInvoke(index, OnTaskComplete, index); }); Console.ReadKey(); } static void OnTaskComplete(IAsyncResult res) { Console.Write(“finish {0} “, res.AsyncState); } 但结果并不是我所期望的,10个线程一个接一个地慢慢开始(大约1秒间隔),甚至一些“完成”在一些“开始”之前出现。 注释掉Thread.Sleep时,所有线程都在flash中开始和结束。 Thread.Sleep会影响其他线程吗? 无论如何要做一个纯粹的空闲时间? / – – – – – – – – – – – […]

Thread.Sleep(0)不能像描述的那样工作?

我目前正在阅读这篇关于线程的优秀文章 ,并阅读以下文字: Thread.Sleep(0)立即放弃线程的当前时间片,自愿将CPU交给其他线程。 我想测试这个,下面是我的测试代码: static string s = “”; static void Main(string[] args) { //Create two threads that append string s Thread threadPoints = new Thread(SetPoints); Thread threadNewLines = new Thread(SetNewLines); //Start threads threadPoints.Start(); threadNewLines.Start(); //Wait one second for threads to manipulate string s Thread.Sleep(1000); //Threads have an infinite loop so we have to close […]

我应该总是使用Task.Delay而不是Thread.Sleep吗?

我最近看到几条建议说明Thread.Sleep永远不应该用在生产代码中(最近在这个SO问题中 )。 其中许多人主张使用Task.Delay 。 我发现的大多数解释都使用UI应用程序作为示例,因为Task.Delay的优点是显而易见的(不阻止UI)。 在我的例子中,我在一个等待循环中使用Thread.Sleep来轮询WCF服务的特定条件,如下所示: DateTime end = DateTime.UtcNow + TimeSpan.FromMinutes(2); while (DateTime.UtcNow < end) { if (ExternalServiceIsReady() == true) { return true; } Thread.Sleep(1000); } 在这种情况下, Task.Delay的以下潜在优势似乎不适用: 睡眠时间相对于大约15毫秒的典型定时器分辨率相当大,因此Task.Delay准确性增加似乎微不足道。 该进程是单线程(非UI),必须阻塞直到条件为真,因此使用await在这里没有优势。 不需要取消延迟的能力。 这是一个适合使用Thread.Sleep吗? 用Task.Delay(1000).Wait()替换我的睡眠线会有什么好处(如果有的话) Task.Delay(1000).Wait() ?

如何在WPF中执行操作之前放置延迟

我尝试使用以下代码在导航到下一个窗口之前延迟2秒。 但线程首先调用,文本块显示一微秒,然后进入下一页。 我听说调度员会这样做。 这是我的片段: tbkLabel.Text = “two mins delay”; Thread.Sleep(2000); Page2 _page2 = new Page2(); _page2.Show();

Thread.Sleep()没有冻结UI

首先,我是C#的初学者,我想这样做: class2.method_79(null, RoomItem_0, num, num2, 0, false, true, true); System.Threading.Thread.Sleep(250); class2.method_79(null, RoomItem_0, num, num4, 0, false, true, true); System.Threading.Thread.Sleep(300); class2.method_79(null, RoomItem_0, num, num6, 0, false, true, true); 但是这个解决方案会冻结用户界面,我怎样才能让第二个事件在第一个事件发生后250毫秒而不冻结用户界面?