Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用一个windows窗体增加另一个窗体的进度条_C#_Winforms - Fatal编程技术网

C# 使用一个windows窗体增加另一个窗体的进度条

C# 使用一个windows窗体增加另一个窗体的进度条,c#,winforms,C#,Winforms,我只是想知道我是否有表格Form1,并声明 public partial class Form1 : Form { GraphLoadProgress loadProgress; public Form1() { loadProgress = new GraphLoadProgress(); loadProgress.Show(); // do some stuff loadProgress.progress = 25; //

我只是想知道我是否有表格Form1,并声明

public partial class Form1 : Form
{
   GraphLoadProgress loadProgress;

   public Form1()
   {
      loadProgress = new GraphLoadProgress();
      loadProgress.Show();
      // do some stuff
      loadProgress.progress = 25; // increment by 25%
      // more stuff 
      for (int i = 0; i < 65; i++) // increment by 65%
      {
         loadProgress.progress = 1;
      }
      // even more stuff
      loadProgress.progress = 10; // increment by 10%

      // blah blah
      loadProgress.progress = 100; // make sure it goes over 100%
   }
}

这显然不起作用,因为即使在我不希望计时器更新和递增的情况下,计时器也会更新和递增。有没有办法递增进度条,并且在进度条仍在更新时只递增一定量的值?

您可以直接使用进度属性的setter,例如:

private int _progress = 0;
public int progress {
    get { return _progress; }
    set {
        _progress = value;
        if (progressBar.InvokeRequired) {
            this.Invoke((MethodInvoker) delegate {progressBar.Value == value;});
        } else {
            progressBar.Value = value;
        }
    }
}
这样,您可以从外部设置progressbar的值。
invokererequired
检查可以从不同的线程设置值

更接近您的行为的是WriteOnly属性(仅为setter):

此外,您还可以始终向表单中添加一个public
Increment
方法

public void IncrementProgress(int Value)
{
    if (progressBar.InvokeRequired) {
        this.Invoke((MethodInvoker) delegate {progressBar.Increment(Value);});
    } else {
        progressBar.Increment(Value);
    }
}

在任何情况下,您都应该添加最大值的检查,以避免出现异常。

友好的专业人士建议匿名下选者:不要在不留下评论的情况下下下下选。有没有可能,您知道如何在加载窗口达到100%时关闭它?@user3078930,因为您可以控制所有更改进度条的路径(在设计器中也将其设置为private)例如,您可以在setter中添加一个检查。更改该值,如果其>=100,则调用this.close()。
public int progress {
    set {
        if (progressBar.InvokeRequired) {
            this.Invoke((MethodInvoker) delegate {progressBar.Increment(value);});
        } else {
            progressBar.Increment(value);
        }
    }
}
public void IncrementProgress(int Value)
{
    if (progressBar.InvokeRequired) {
        this.Invoke((MethodInvoker) delegate {progressBar.Increment(Value);});
    } else {
        progressBar.Increment(Value);
    }
}