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框架.