为了账号安全,请及时绑定邮箱和手机立即绑定

线程问题 - 阻塞 UI 线程

线程问题 - 阻塞 UI 线程

C#
温温酱 2023-08-20 14:23:02
我正在尝试模拟一个过程,其中按钮依次设置为一种颜色,然后每隔几秒返回到之前的颜色。问题是,我不完全确定如何在不阻塞 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;

    }

}


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信