线程问题-阻止UI线程

时间:2019-08-08 21:52:55

标签: c# wpf

我正在尝试模拟一个过程,在该过程中,按钮被依次设置为一种颜色,然后每隔几秒钟恢复到其先前的颜色。

问题是,我不确定如何在不阻止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 个答案:

答案 0 :(得分:1)

如果从用户界面中单击按钮,然后在用户界面线程上单击,则您不需要@RestController @RequestMapping("/test") public class TestController { @RequestMapping(value = "/test", method = RequestMethod.GET) public String test() { String results = ""; results = "foo"; //<-- insert custom code here (if exists) each time method is invoked results += "bar"; return results; } } 。只需循环浏览按钮并更改其颜色即可。没有理由Dispatcher.Invoke仅返回虚拟Select值。另外,几乎没有理由不使用true构造函数,尤其是不要在UI线程上运行工作。这样的事情应该起作用:

Task