Wpf 对于每个循环不';睡不着
我有一个For..每个循环,它通过所有网格的矩形循环,并随机改变它们的填充。我使用彩色动画更改填充。这是我的密码:Wpf 对于每个循环不';睡不着,wpf,vb.net,Wpf,Vb.net,我有一个For..每个循环,它通过所有网格的矩形循环,并随机改变它们的填充。我使用彩色动画更改填充。这是我的密码: Dim rand as new random Dim changeColor As New Animation.ColorAnimation changeColor.Duration = TimeSpan.FromSeconds(0.5) For Each r As Rectangle In Grid.Childr
Dim rand as new random
Dim changeColor As New Animation.ColorAnimation
changeColor.Duration = TimeSpan.FromSeconds(0.5)
For Each r As Rectangle In Grid.Children
changeColor.From = ColorConverter.ConvertFromString(r.Fill.ToString)
Dim i As Integer = rand.Next(0, 2)
Select Case i
Case 0
changeColor.To = Colors.White
Case 1
changeColor.To = Colors.Gray
End Select
Animation.Storyboard.SetTarget(changeColor, r)
Animation.Storyboard.SetTargetProperty(changeColor, New PropertyPath("Fill.Color"))
Dim sb As New Animation.Storyboard
sb.Children.Add(changeColor)
sb.Begin()
System.Threading.Thread.Sleep(0.5)
Next
问题是循环没有睡眠。我想触发动画,然后等待直到矩形填充被改变,然后继续其余的,但似乎所有的矩形填充都在同一时间被改变。那么我做错了什么?替换:
System.Threading.Thread.Sleep(0.5)
与:
睡眠值为整数和。当您执行睡眠(0.5)时,您得到的只是一个上下文切换。您睡眠UI线程,因此循环和所有渲染都会停止。你可以试试我为另一个问题写的方法
编辑:同时更改Michael Holdshteyn指出的时间。线程。睡眠时间以毫秒为单位。你是说你想让它休眠0.5毫秒(或0.00005秒) 这可能不足以完成任务
然后,还有一种可能性是,您与UI运行在同一线程中。如果是这种情况,那么除非您使视觉效果无效,否则在您完成处理之前,屏幕不会刷新 看起来你正在让主线进入睡眠状态。这意味着在thread.sleep完成之前,动画可能不会启动。请您将答案中的代码转换为VB.NET,好吗?@Cobold:我不会说VB.NET,但可能会帮助您。(我还想说,与VB.NET相比,C#真的不难理解)这不起作用,它只是为我拥有的每个矩形等待0.5秒,只有在它处理完所有矩形后才改变它们的颜色。
System.Threading.Thread.Sleep(500)