【问题标题】:Progress bar in wpf c#wpf c#中的进度条
【发布时间】:2014-08-06 12:38:01
【问题描述】:

谁能帮助我如何将进度条集成到我的一种方法中?我的意思是当我执行一个方法示例来提取 zip 文件时,我会显示一个进度条来了解我的方法的进度,并且当方法完成时,进度条将达到 100%。

这是我提取文件的代码,我想在其中添加进度条

public void ExtractFiles()
{
     foreach (var file in d.GetFiles("*."))
     {
          if (!Directory.Exists(targetPath))
              Directory.CreateDirectory(targetPath);

          if (!File.Exists(targetPath + file.Name))
          {
              Directory.Move(file.FullName, targetPath + file.Name);
          }
          else
          {
              File.Delete(targetPath + file.Name);
              Directory.Move(file.FullName, targetPath + file.Name);
          }
     }
}

我想知道如何根据方法的进度显示进度条的百分比。

【问题讨论】:

  • 到目前为止,您对进度条进行了哪些探索和尝试?
  • 你在问什么?如何创建进度条?如何将进度条绑定到值?如何计算价值?如何使用调度程序?
  • @bit,我尝试使用一个简单的进度条,即使我的过程已经完成。我不知道如何将它与我的方法集成
  • 我看到您可以使用基于事件的简单机制来更新进度条。Progresssbar 和 ExtractFiles() 是否属于不同的类?
  • @Bit,我该怎么做?

标签: c# wpf progress-bar


【解决方案1】:

既然你有相同的形式,它应该很简单..

假设您已将 ProgressBar 命名为 pb,您可以尝试这样的操作..

public void ExtractFiles()
{
     var total = d.GetFiles("*.").count();
     var progressChange =  100/total;

    foreach (var file in d.GetFiles("*."))
    {
        if (!Directory.Exists(targetPath))
            Directory.CreateDirectory(targetPath);

        if (!File.Exists(targetPath + file.Name))
        {
            Directory.Move(file.FullName, targetPath + file.Name);
        }
        else
        {
            File.Delete(targetPath + file.Name);
            Directory.Move(file.FullName, targetPath + file.Name);
        }
        pb.Value += progressChange;
    }
}

【讨论】:

  • 等一下,我试试这个。
  • 谢谢。它确实有效。我只是添加一些修改。
  • 它没有满栏
【解决方案2】:

从@bit 复制代码并稍作改动。

试试这个:

public void ExtractFiles()
{
     var files = d.GetFiles("*.");
     int total = files.Count();
     var progressChange = 100/total;

    foreach (var file in files)
    {
        if (!Directory.Exists(targetPath))
            Directory.CreateDirectory(targetPath);

        if (!File.Exists(targetPath + file.Name))
        {
            Directory.Move(file.FullName, targetPath + file.Name);
        }
        else
        {
            File.Delete(targetPath + file.Name);
            Directory.Move(file.FullName, targetPath + file.Name);
        }
        //Here is the little bit change I did.
        pb.Dispatcher.BeginInvoke(new Action(()=>{
            pb.Value += progressChange;
        }));

    }
}

希望对你有帮助。

【讨论】:

  • 它没有满栏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
相关资源
最近更新 更多