是否有任何命令立即更新UI?

Cha*_*pol 3 c# wpf user-interface asynchronous dispatcher

我想使用此代码更新从1到100的进度条.

for (int i = 0; i <= 100; i++) {
    System.Threading.Thread.Sleep(100);
    progressBar1.Value = i;
}
Run Code Online (Sandbox Code Playgroud)

但结果是,UI冻结直到循环完成.

我知道Dispatcher可以提供帮助,但我不想拆分功能.

是否有任何命令立即更新UI像..

for (int i = 0; i <= 100; i++) {
    System.Threading.Thread.Sleep(100);
    progressBar1.Value = i;
    UpdateUINow();
}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用WPF,我使用Thread.Sleep来模拟长时间运行的进程.

事实上,我想要任何喜欢的命令Application.DoEvents.但是我在WPF中找不到这个命令.

Jon*_*eet 15

不要在UI线程中睡觉.它会冻结你的UI - 这是一件坏事.

要么有一个类型的计时器(使用正确的计时器,你应该能够在你的UI线程中启动它)或使用一个单独的线程(通过BackgroundWorker,一个新的单独的线程,或ThreadPool),并使其调用回到UI线程来更新它.

Application.DoEvents是一个在WinForms中的hacky解决方法,但你提到的事实Dispatcher表明你正在使用WPF - 就是这种情况?您应该使用的计时器类型(如果您要使用该解决方案)将取决于您正在使用的UI框架.

  • +1很高兴有人能够在吃掉我的鸡爪时对抗不断增长的"DoEvents"推荐列表. (2认同)