简体   繁体   English

在UI上延迟调用+更新CountDown

[英]Delay Call + Update CountDown on UI

I want to delay loading data anywhere between 1 and 20 seconds. 我想延迟加载数据1到20秒之间的任何时间。 I also want to update the UI with the countdown to update like "Updating data in x..." 我还想更新具有倒计时的UI以更新,例如“在x中更新数据...”

I can do Task.Delay, or DispatcherTimer or Aysnc/await but how do I update the UI with every second countdown ? 我可以做Task.Delay,或DispatcherTimer或Aysnc / await,但如何每​​隔倒计时更新一次UI?

Sample to put my point across (it won't work for me since this is blocking UI thread). 示例提出我的观点(这对我不起作用,因为这是阻止UI线程)。

private void Update()
    {
        var random = new Random();
        var counter = random.Next(1, 20);
        for (int i = counter; i > 0; i--)
        {
            UpdateCounter = i;// property bound to UI to update the countdown
            Thread.Sleep(1000); // 
        }
        // some function to update data...
    }

There are a lot of options how to do it. 如何做有很多选择。 I implemented 2 of them. 我实施了其中两个。 I would recommend second, but it depends on your needs. 我建议第二,但这取决于你的需求。

    private void Update1()
    {
        Task.Factory.StartNew(() =>
            {
                var random = new Random();
                var counter = random.Next(1, 20);
                for (int i = counter; i > 0; i--)
                {
                    Dispatcher.Invoke(() => UpdateCounter = i);
                    Task.Delay(1000).Wait();
                }
                Dispatcher.Invoke(// some function to update data...);
            }
        );
    }

    private async Task Update2()
    {
        var random = new Random();
        var counter = random.Next(1, 20);
        for (int i = counter; i > 0; i--)
        {
            UpdateCounter = i;
            await Task.Delay(1000);
        }

        // some function to update data...
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM