示例:做某事 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 + "%"));
}
});
my message box immediately show message after i run command while percentage is running
如上所述,任务正在另一个线程上执行。因此它将与 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());
关于c# - 如何创建循环百分比(处理)[c#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41260778/