你能告诉我如何暂停我的程序 500 毫秒然后继续吗?
我读到 Thread.Sleep(500)
不好,因为它占用了 GUI 线程。
使用定时器触发回调 ...
我只想等待 500 毫秒,然后继续执行下一条语句。
请指教。
编辑:我需要显示状态栏消息 500 毫秒,然后用不同的消息更新消息。抱歉,我的意思是 500 不是 50。
编辑:我确实理解您所说的一切。但是: [我只想等待 500 毫秒,然后继续执行下一条语句。] 我认为因为间隔太短,我将在主 GUI 线程上执行 Thread.Sleep(500)。否则我将不得不重写大量代码来适应这个 500 毫秒的短暂间隔。
编辑:我会尝试重新格式化我的状态消息,这样就不需要暂停了。
最佳答案
Hmya,您尝试做的事情从根本上与 Windows 编程模型不兼容。 native Windows 程序是事件驱动的。您的程序总是处于空闲状态,处于由 Application.Run() 启动的循环中,等待 Windows 告诉它发生了一些有趣的事情,它应该响应。绘画请求、鼠标点击、计时器到期等等。
您的程序应该对此做出响应并过滤您感兴趣的内容。当您将按钮放在窗体上时,您总是对 Click 事件感兴趣,该事件在 Windows 发送 MouseDown 通知消息时生成。您的 Click 事件处理程序运行您编写的某种自定义代码。就像在您的案例中更新状态栏消息一样。
半秒后更新状态栏消息并没有什么意义。在这 500 毫秒内到底发生了什么改变了程序响应事件的方式?您可以调用 StatusBar 的 Update() 方法以便新消息可见,然后调用 System.Threading.Thread.Sleep(500) 以获得您想要的内容。你会摆脱它,Windows 提出的“无响应”幽灵会让你的程序死掉几秒钟。
但这并没有多大意义,在那半秒内什么也没发生,你的程序状态没有改变。它不能改变,它对 Windows 来说是死的,并且没有收到任何允许它改变状态的消息。
嗯,这就是我所能接受的。请更新您的问题并解释您为什么需要这样做。以防万一:如果您打算假装在半秒钟内做一些重要的事情,您的用户将不会留下深刻印象。她最终会注意到您的 UI 有半秒钟没有显示任何内容。
关于C# 休眠 500 毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530950/