【问题标题】:Delay Call + Update CountDown on UIUI上的延迟呼叫+更新倒计时
【发布时间】:2017-10-05 04:02:00
【问题描述】:

我想将加载数据的时间延迟 1 到 20 秒。我还想用倒计时来更新 UI 以更新,例如“正在更新 x...中的数据”

我可以执行 Task.Delay、DispatcherTimer 或 Aysnc/await,但是如何在每秒钟倒计时更新 UI?

说明我的观点的示例(它对我不起作用,因为这会阻塞 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...
    }

【问题讨论】:

  • I can do Task.Delay, or DispatcherTimer or Aysnc/await 好的,那么您使用这些工具编写的解决方案是什么?具体来说,它们不起作用怎么办?

标签: c# .net wpf


【解决方案1】:

有很多选择如何做到这一点。我实现了其中的 2 个。我会推荐第二个,但这取决于您的需求。

    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...
    }

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多