当我使用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?
永远不要在UI线程中休眠。从来没有。。
你需要创建一个新的线程来播放你的声音
在一个WPF应用程序中,你可以在同一个进程中拥有多个独立于执行的控制流的"线程"。
你在代码中采取的方法是所有的事情都发生在用户界面线程上——这是负责重新绘制屏幕的线程。当这个线程忙于运行你的莫尔斯电码例程时,它不能做任何重绘。
你需要做的是把你的莫尔斯电码例程的执行移到一个单独的线程上——这将允许UI线程及时处理重绘。实现这一点最简单的方法是使用BackgroundWorker对象。(你可以在网上找到的大多数例子都是使用WinForms的,但它也可以很好地与WPF一起工作。)
但是请注意,您正在进入一个中等复杂的开发领域。根据你对@EboMike的评论,你会发现这是一个挑战——有很多的新概念让你的头脑变得混乱。CodeProject上的线程入门指南可能是一个很好的起点。(我通过谷歌搜索找到了这篇文章,前几段是Ok - YMMV。)好运。