因此,首先应该避免 application.DoEvents ,除非您真的知道自己在做什么,并且确定这是对它的适当使用,并且您正在正确使用它。我相当肯定,这里的情况都不是。
接下来,你如何控制衰落的速度?您基本上只是让计算机尽可能快地消失,并依靠操作(和后台进程)的固有开销来使其花费更长的时间。这真的不是很好的设计。您最好指定淡入淡出从一开始需要多长时间,以便在机器之间保持一致。您可以使用 aTimer
以适当的设置间隔执行代码,并确保 UI 线程在淡入淡出期间不被阻塞(不使用DoEvents
)。
只需修改duration
以下内容以更改淡入淡出所需的时间,并修改steps
以确定它的“波涛汹涌”程度。我将其设置为 100,因为这实际上是您的代码之前所做的。实际上,您可能不需要那么多,您可以降低到它开始变得波涛汹涌之前。(步骤越低,它的性能就越好。)
此外,您不应该如此担心此类事情的性能。褪色是需要在大约一秒或不少于一秒的范围内测量的东西(人类能够感知它),而对于如今的任何计算机来说,它都可以做到这一点,远不止于此在一秒钟内,它甚至都不好笑。这将在一秒钟内的计算方面几乎不消耗 CPU,因此尝试优化它肯定是微优化。
private void button1_Click(object sender, EventArgs e)
{
int duration = 1000;//in milliseconds
int steps = 100;
Timer timer = new Timer();
timer.Interval = duration / steps;
int currentStep = 0;
timer.Tick += (arg1, arg2) =>
{
Opacity = ((double)currentStep) / steps;
currentStep++;
if (currentStep >= steps)
{
timer.Stop();
timer.Dispose();
}
};
timer.Start();
}