2015-01-13 50 views
-1

我有问题。我在Google上找不到与此相关的任何内容,这就是为什么我希望你的SOF专家能帮助我。.net 2.0中的异步睡眠

基本上我试图进行睡眠,但这些都是条件。

  • 这种睡眠,我喜欢让不应该中断程序(冻结它)
  • 应该.NET 2.0的 - 在这种情况下不能使用Task.Delay()

我基本上有一个Form fade infade out和之间我喜欢执行fadeout之前等待几秒钟。在窗体上也是animations等,所以我需要确保他们不会挂在睡觉时。

有人有关于如何实现这一点的想法?

+0

绝对使用[System.Windows.Forms.Timer](http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.110%29.aspx)正如Servy所建议的那样。否则,你总会得到一些包含Sleep()和DoEvents()的小调用的紧密循环,这通常是**从来就不是一件好事**。 –

+0

@Idle_Mind:请注意,Servy没有明确提示Winforms命名空间中的Timer类。实际上,他的措辞意味着直接使用'Task.Delay()'方法使用的'Timer'类('System.Threading.Timer'),即允许一次性定时器的类。我同意你的建议,使用WinForms Timer类,因为它将更容易在Winforms环境中使用(不需要Invoke())。但它的确意味着你必须记得在第一次触发时立即关闭计时器,以获得一次性短暂行为。 –

+1

@PeterDuniho,的确如此。我想知道最初的'淡入淡出'部分是如何实现的。我会在整个过程中使用Timer,并简单地改变'Interval'来获得更长的停顿时间。 –

回答

8

使用Timer。这就是Task.Delay在底层实现的方式。只需将定时器配置为仅触发一次,并将其间隔设置为延迟时间长度。