System.Threading睡眠功能有帮助吗? (C#)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了System.Threading睡眠功能有帮助吗? (C#),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2273字,纯文字阅读大概需要4分钟。
内容图文
![System.Threading睡眠功能有帮助吗? (C#)](/upload/InfoBanner/zyjiaocheng/765/1f6c2eab5d484e939fc12fe9874ce570.jpg)
我是C#的新手,我正在使用System.Threading.
我有这个代码:
UISystem.SetScene(Scene_Menu);
Thread.Sleep (9000);
p.Text="HELLO";
Thread.Sleep(9000);
p.Text="WORLD";
它延迟了18秒,但是睡眠功能之间没有显示p.Text =“HELLO”.我的代码有什么问题?
谢谢.
定时器不起作用,因为我无法从单独的线程编辑p.
Application.DoEvents()是一个Windows窗体函数,我正在PS Vita中构建一个应用程序.
解决方法:
您已经发现了为什么不应该使用Thread.Sleep.它只对两件事有用. (1)编写需要模拟线程忙碌一定秒数的测试用例,以及(2)睡眠零毫秒告诉操作系统“如果有一个进程,我将剩余的时间切换到另一个进程想要它“;这是礼貌的事情.
你应该永远不要使用thread.Sleep来引入一个延迟,正如你所发现的那样.您正在设置属性,但设置属性不会导致操作系统重新绘制屏幕.考虑一下;你可能在一个方法中有一千个属性集,并且你必须在所有这些之后重新绘制屏幕,??这看起来很难看并且非常慢.
相反,所发生的是属性设置,并且该对象向操作系统发出一个注释,说明该线程何时可用于再次处理操作系统消息,请重新绘制.你的程序是,而不是告诉操作系统“我已经完成了,继续查看是否有任何消息给我”,而不是你希望线程在9秒钟内什么都不做.
现在,您可以通过调用DoEvents来告诉程序检查消息,但使用DoEvents也是一个坏主意,您不应该这样做.这样做基本上会导致您的程序出现注意力缺陷症状;你没有完成当前的工作,你正在寻找是否有新的工作要做,而不从调用堆栈中删除旧的工作!假设那些新工作依次被中断,依此类推,等等.堆栈无限制地增长,这是非常糟糕的. DoEvents是一种“最糟糕的做法”,就像睡觉一样.你可以在简单的小程序中使用它,但是当程序变得复杂时会导致很大的麻烦.
而且:是的,DoEvents会绘制你的控件,但就是这样.在接下来的九秒钟内,应用程序将显示给用户完全挂起.这是一个非常糟糕的用户体验.
如果你想引入延迟,正确的做法是异步等待.在C#4及更早版本中,标准的方法是创建一个计时器,当计时器打勾时,做下一件事.
现在,您说您不能使用计时器,因为您需要从UI线程访问控件.没关系.计时器的tick事件处理程序将在UI线程上运行,而不是在单独的线程上运行.您可以安全地使用计时器.
在C#5中,正确的做法是使用新的await关键字来引入异步等待.也就是说,等待时等待其他东西的等待,而不是在等待时进入睡眠状态.在C#5中,您可以将代码编写为:
UISystem.SetScene(Scene_Menu);
await Task.Delay (9000);
p.Text="HELLO";
await Task.Delay(9000);
p.Text="WORLD";
C#5目前处于测试阶段;有关此新功能的详细信息,请参阅:
http://msdn.microsoft.com/en-us/async
有关异步的简单介绍以及为什么DoEvents是坏消息的解释,请参阅我的MSDN杂志文章:
http://msdn.microsoft.com/en-us/magazine/hh456401.aspx
内容总结
以上是互联网集市为您收集整理的System.Threading睡眠功能有帮助吗? (C#)全部内容,希望文章能够帮你解决System.Threading睡眠功能有帮助吗? (C#)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。