【问题标题】:How to make a delay in a UWP with C#如何使用 C# 在 UWP 中进行延迟
【发布时间】:2020-10-26 20:20:46
【问题描述】:

我是 C# 的新手,我不太了解它。
我正在尝试制作一个每秒更改一个 TextBlock 的应用程序。该应用是 UWP,我使用的是 C#。
这是我的代码:

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        public bool stop = false;

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string input = TextInput.Text + " ";
            TextOutput.Text = input;
            string output = TextOutput.Text;

            for (int i = 0; i <50; i++)
            {
                output = output.Substring(1, output.Length - 1) + output[0];
                TextOutput.Text = output;
                Task.Delay(150);
            }
        }
    }

目前我已经尝试过Task.Delay()Thread.Sleep() 和其他方法,但这并不能停止 for 循环。
事实上,我已经为控制台制作了相同的应用程序,并且 Thread.Sleep() 完美运行。
你能帮帮我吗?

【问题讨论】:

    标签: c# windows visual-studio uwp


    【解决方案1】:

    您非常接近,只是Task.Delay 是一项任务,也许很明显。你必须等待(或继续)任务:

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string input = TextInput.Text + " ";
            TextOutput.Text = input;
            string output = TextOutput.Text;
    
            for (int i = 0; i <50; i++)
            {
                output = output.Substring(1, output.Length - 1) + output[0];
                TextOutput.Text = output;
                await Task.Delay(150);
            }
        }
    

    【讨论】:

    • 谢谢!如果我使用 async void,延迟会正常工作吗?
    • 不过要小心——因为await 调用,您的代码是可重入的。用户可以在循环运行时再次单击该按钮。
    【解决方案2】:

    您传递给 Task.Delay / Thread.Sleep 的值将是毫秒而不是秒。

    我会尝试 Thread.sleep(1000) // 这会让你延迟 1 秒。

    【讨论】:

    • 我已经这样做了,但没有。这会停止窗口,但程序会跟着做。这不是解决方案。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多