我有一个名为Sequence的布尔值列表。我想根据列表的值更改形状的颜色,也就是说,我每次遍历True时都要遍历列表的值并用某种颜色(例如黄色)填充形状每次我发现False值时,更改填充的颜色(更改为蓝色)。我试图这样做:
foreach(bool element in Sequence)
{
if(element){ ellipse.Fill = new SolidColorBrush(Colors.Yellow); }
else{ ellipse.Fill = new SolidColorBrush(Colors.Blue); }
int milisecond = 200;
Thread.Sleep(miliseconds);
}
但是颜色仍然不会交替出现。
这是XAML:
`<Ellipse x:Name="elipse" Height="100" Margin="151,52,0,0" Stroke="Black" Width="100" /> `
我需要扳机吗?我在做什么错?预先谢谢您,如果有什么好笑的话,请原谅我的英语不好。
foreach(bool element in Sequence)
{
if(element){ ellipse.Fill = new SolidColorBrush(Colors.Yellow); }
else{ ellipse.Fill = new SolidColorBrush(Colors.Blue); }
int milisecond = 200;
Thread.Sleep(miliseconds);
}
在UI线程上同步运行。因此,UI永远没有机会更新颜色。请改用计时器。
当然,那么您就不能这样做foreach
,因为您必须跟踪当前索引。一个办法解决这将是保持当前的代码,但替换Thread.Sleep
用await Task.Delay
。
(来自Peter Duniho的道歉,他添加了此代码示例,但是这个答案似乎正在呼唤一个人):
<edit>
的async
基础看起来像这样(恕我直言,比使用计时器更可取):
foreach (bool element in Sequence)
{
ellipse.Fill = new SolidColorBrush(element ? Colors.Yellow : Colors.Blue);
await Task.Delay(200);
}
当然,要能够使用await
它,使用它的方法需要声明为async
。不幸的是,最初的问题并没有提供完整的方法及其签名,但是大概OP可以async
自己研究方法的使用并查看如何进行转换。
</ edit>
整机采用案例似乎应该是重新设计的,但这些解决方案之一应该让你越往下此路径。请记住,如果您在编写代码隐藏程序,则可能做错了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句