我只是想知道我是否有表单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%
}
}
在我的GraphLoadProgress表单中是以下
public partial class GraphLoadProgress : Form
{
public int progress { get; set; }
private void StartBackgroundWork()
{
if (Application.RenderWithVisualStyles)
progressBar.Style = ProgressBarStyle.Marquee;
else
{
progressBar.Style = ProgressBarStyle.Continuous;
progressBar.Maximum = 100;
progressBar.Value = 0;
timer1.Enabled = true;
}
//backgroundWorker.RunWorkerAsync();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar.Value > progressBar.Maximum)
this.Close();
progressBar.Increment(progress);
}
}
这显然不起作用,因为即使我不想要它,计时器也会更新和增加,有没有办法增加进度条,只在进度条仍在更新时增加一定量?
答案 0 :(得分:1)
您可以直接使用progress属性的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;
}
}
}
通过这种方式,您可以从外部设置进度条的值。 InvokeRequired
检查使得可以从不同的线程设置值。
更接近地模仿你的行为将是一个WriteOnly属性(只有一个setter):
public int progress {
set {
if (progressBar.InvokeRequired) {
this.Invoke((MethodInvoker) delegate {progressBar.Increment(value);});
} else {
progressBar.Increment(value);
}
}
}
您也可以随时向表单添加公共Increment
方法。
public void IncrementProgress(int Value)
{
if (progressBar.InvokeRequired) {
this.Invoke((MethodInvoker) delegate {progressBar.Increment(Value);});
} else {
progressBar.Increment(Value);
}
}
您应该在任何情况下添加最大值的检查,以避免例外。