我正在嘗試模擬一個過程,其中按鈕依次設置為一種顏色,然后每隔幾秒返回到之前的顏色。問題是,我不完全確定如何在不阻塞 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 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消