Wpf 对于每个循环不';睡不着

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

我有一个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.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)