C# 使用一个windows窗体增加另一个窗体的进度条
我只是想知道我是否有表格Form1,并声明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; //
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):
此外,您还可以始终向表单中添加一个publicIncrement
方法
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);
}
}