当我使用Thread.Sleep时,如何更新UI ?

本文关键字:何更新 更新 UI Thread Sleep | 更新日期: 2023-09-27 18:07:50

这是我使用的函数:

    private void Convert2Morse(object obj)
    {
        TextConverted = am.Convert(NormalText);
        foreach (char symbol in TextConverted)
        {
            int milliseconds = 0;
            switch (symbol)
            {
                case '·': milliseconds = 500; break;
                case '—': milliseconds = 1000; break;
                case ' ': continue;
                default: throw new Exception("Something is wrong");
            }
            System.Media.SystemSounds.Beep.Play();
            System.Threading.Thread.Sleep(milliseconds);
        }
    }

textconversion属性显示在一个文本框中,但是在完成子例程之前会刷新。

是否有一种方法可以显示刷新UI?

当我使用Thread.Sleep时,如何更新UI ?

永远不要在UI线程中休眠。从来没有。。

你需要创建一个新的线程来播放你的声音

在一个WPF应用程序中,你可以在同一个进程中拥有多个独立于执行的控制流的"线程"。

你在代码中采取的方法是所有的事情都发生在用户界面线程上——这是负责重新绘制屏幕的线程。当这个线程忙于运行你的莫尔斯电码例程时,它不能做任何重绘。

你需要做的是把你的莫尔斯电码例程的执行移到一个单独的线程上——这将允许UI线程及时处理重绘。实现这一点最简单的方法是使用BackgroundWorker对象。(你可以在网上找到的大多数例子都是使用WinForms的,但它也可以很好地与WPF一起工作。)

但是请注意,您正在进入一个中等复杂的开发领域。根据你对@EboMike的评论,你会发现这是一个挑战——有很多的新概念让你的头脑变得混乱。CodeProject上的线程入门指南可能是一个很好的起点。(我通过谷歌搜索找到了这篇文章,前几段是Ok - YMMV。)

好运。