在寻找淡入winform的代码时,我发现了这个MSDN论坛上的页面。
for (double i = 0; i < 1; i+=0.01)
{
this.Opacity = i;
Application.DoEvents();
System.Threading.Thread.Sleep(0);
}
for
循环中使用非整数增量是不好的编程技巧(由于大多数小数的不精确表示)。我想出了另一种替代方案。
for (double i = 0; i < 100; ++i)
{
this.Opacity = i/100;
Application.DoEvents();
System.Threading.Thread.Sleep(0);
}
以下哪种更有效率?
如果有更好的淡化表单的算法,如果能加入就非常感激。
谢谢。
Sleep(0)
是为了将线程剩余的时间返回给调度程序,以便让其他线程有机会运行。也许在.NET上也是一样的。MSDN指出:“_如果您指定0毫秒,则线程将放弃其时间片的剩余部分,但仍然保持就绪状态._” - Uwe Keim