我正在尝试模拟一个过程,其中按钮依次设置为一种颜色,然后每隔几秒返回到之前的颜色。问题是,我不完全确定如何在不阻塞 UI 线程的情况下迭代集合...我不喜欢使用 thread.sleep 但这是我在 SO 上发现的。有人帮助我吗?我在下面发布了“开始”按钮单击的代码 private void StartTest_Click(object sender, RoutedEventArgs e) { //tabControl.SelectedIndex = 3; // Emulate buttons being processed Dispatcher.Invoke(() => { new Task(() => { selectedButtons.All(bSelected=> { bSelected.Background = resourceDictionary["ProcessingButtonColour"] as Brush; Thread.Sleep(3000); bSelected.Background = resourceDictionary["HoverOverColourInactive"] as Brush; return true; }); }).Start(); }); }
1 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
Dispatcher.Invoke如果从 UI 单击按钮然后在 UI 线程上单击按钮,则不需要此处。只需循环按钮并更改其颜色即可。没有理由Select只返回虚拟true值。另外,几乎没有理由不使用Task构造函数,尤其是不要在 UI 线程上运行工作。像这样的东西应该有效:
private async void StartTest_Click(object sender, RoutedEventArgs e)
{
foreach (var button in selectedButtons)
{
button.Background = resourceDictionary["ProcessingButtonColour"] as Brush;
await Task.Delay(3000);
button.Background = resourceDictionary["HoverOverColourInactive"] as Brush;
}
}
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消