C# 延迟呼叫+;更新UI上的倒计时

C# 延迟呼叫+;更新UI上的倒计时,c#,.net,wpf,C#,.net,Wpf,我想延迟加载数据1到20秒。我还想用倒计时更新UI,如“更新x中的数据…” 我可以做Task.Delay、dispatchermer或Aysnc/await,但如何用每秒钟的倒计时更新UI 示例来阐明我的观点(这对我来说不起作用,因为这会阻塞UI线程) 如何做到这一点有很多选择。我实现了其中的两个。我想推荐第二种,但这取决于你的需要 private void Update1() { Task.Factory.StartNew(() =>

我想延迟加载数据1到20秒。我还想用倒计时更新UI,如“更新x中的数据…”

我可以做Task.Delay、dispatchermer或Aysnc/await,但如何用每秒钟的倒计时更新UI

示例来阐明我的观点(这对我来说不起作用,因为这会阻塞UI线程)


如何做到这一点有很多选择。我实现了其中的两个。我想推荐第二种,但这取决于你的需要

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

我可以执行任务。延迟、Dispatchermer或Aysnc/await
好的,那么您使用这些工具编写的解决方案是什么,具体来说,它们有哪些不起作用?
    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...
    }