c# - 如何创建循环百分比(处理)[c#]

标签 c# wpf visual-studio loops percentage

示例:做某事 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/

相关文章:

wpf - 只是我,还是 WPF 是一堆数据绑定(bind)和自定义 IValueConverters?

c# - 使用 C# 的 VMware vCenter API - InitiateFileTransferToGuest 失败

c# - 如何从启动中获取 ASP.NET Core 2 中的 Url.Action?

C# : How to design a UI that couples to a dynamically generated object?

c# - 仅当 ListView 不为空(有项目)时才使 TextBox 可见

c# - 根据滚动位置动态显示 ComboBox 的元素

.net - VB中如何在运行时移动控件并保存位置数据?

c++ - 我可以在 Visual Studio 中的 Lambda 中定义模板化函数

c++ - 如何在不需要 LIBCD.lib 的情况下在 Visual Studio 6 中编译 C 项目?

c# - 如何为所有整数类型制作扩展方法?