示例:做某事 9999 次(可能超过)
for (int i = 1; i <= 9999; i++)
{
// do something
label1.content = 100*i/9999 + "%" ;
}
我想在编译时显示 label1 上的循环百分比,我无法在几毫秒内执行任何操作,并且我的标签仅显示 100%。有人有什么想法吗,先生?谢谢。
您无法在同一线程上同时运行循环和更新 UI。这就是为什么您应该始终在后台线程上执行任何长时间运行的工作,并使用调度程序定期更新 UI。
在后台线程上运行某些代码的最简单方法是使用任务并行库(TPL)来启动新任务:
Task.Run(()=>
{
for (int i = 1; i <= 9999; i++)
{
System.Threading.Thread.Sleep(1500); //simulate long-running operation by sleeping for 1.5s seconds...
label1.Dispatcher.BeginInvoke(new Action(() => label1.Content = 100 * i / 9999 + "%"));
}
});
在百分比运行时运行命令后,我的消息框立即显示消息
如前所述,任务正在另一个线程上执行。所以它会运行在parallel与 UI 线程。这就是为什么 UI 可以在循环运行时更新的原因。
您可以使用 Task.ContinueWith 方法在任务完成后显示 MessageBox:
int i = 1;
Task.Run(() =>
{
for (; i <= 9999; i++)
{
System.Threading.Thread.Sleep(1500); //simulate long-running operation by sleeping for 1.5s seconds...
label1.Dispatcher.BeginInvoke(new Action(() => label1.Content = (i / 9999) * 100 + "%"));
}
}).ContinueWith(t =>
{
MessageBox.Show("done..." + i.ToString());
}, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)