【发布时间】:2012-09-11 22:42:00
【问题描述】:
在搜索淡化 winform 的代码时,我在 MSDN 论坛上看到了这个 page。
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);
}
哪一个更高效?
如果有更好的表格淡化算法,我会很高兴的。
谢谢。
【问题讨论】:
-
@DarrenDavies 在 Win32,IIRC 上,
Sleep(0)是将线程的剩余时间返回给调度程序,以让其他线程有机会运行。也许在 .NET 上是一样的。 MSDN states: "如果您指定 0 毫秒,线程将放弃其时间片的剩余部分但保持就绪状态。" -
简单地将
int更改为double怎么样? -
vb.net Single 在 C# 中是“float”,而不是 int。
-
您可以查看 Windows API - codeproject.com/Articles/43058/…