我创建了一个窗体,我有一个进度条,我想从另一个类更新进度条的值。我已经在课堂上编写了一个关于执行的函数,我希望看到进度条的进展情况。
例如:
namespace UpdateProgressBar
{
public partial class ProgressBarUdpate : Form
{
public ProgressBarUdpate()
{
InitializeComponent();
}
private void btn_Submit_Click(object sender, EventArgs e)
{
UpdateDataProgress updt = new UpdateDataProgress();
updt.ExecuteFucntion();
}
}
}
namespace UpdateProgress
{
public class UpdateDataProgress
{
public void ExecuteFucntion()
{
for (int i = 0; i < 100; i++)
{
}
}
}
}
我的预期输出是当我调用updt.ExecuteFucntion函数时,它应该根据在另一个类中实现的循环更新进度条值。
答案 0 :(得分:1)
您应该在此要求中使用Event
。
<强>逻辑:强>
由于您的基本要求是根据方法的执行状态(在类库中)更新Progressbar
(UI
)
您需要在执行ExecuteFucntion()
时引发事件。此活动将以ProgressBarUdpate
格式处理。
正如您在下面的代码中所看到的,在创建UpdateDataProgress
的对象后,我们按updt.ExecutionDone += updt_ExecutionDone;
订阅了它的事件
因此,只要该事件从ExecuteFucntion()
提出,它就会调用updt_ExecutionDone
ProgressBarUdpate
,您可以在其中更新您的进度条。
更新您的代码,如下所示。
public partial class ProgressBarUdpate : Form
{
public ProgressBarUdpate()
{
InitializeComponent();
}
private void btn_Submit_Click(object sender, EventArgs e)
{
UpdateDataProgress updt = new UpdateDataProgress();
updt.ExecutionDone += updt_ExecutionDone;
updt.ExecuteFucntion();
}
void updt_ExecutionDone(int value)
{
//Update your progress bar here as per value
}
}
和班级UpdateProgress
public delegate void ExceutionHandler(int value);
public class UpdateDataProgress
{
public event ExceutionHandler ExecutionDone;
public void ExecuteFucntion()
{
for (int i = 0; i < 100; i++)
{
//perform your logic
//raise an event which will have current i
// to indicate current state of execution
// use this event to update progress bar
if (ExecutionDone != null)
ExecutionDone(i);
}
}
}
答案 1 :(得分:0)
您可以使用事件,或只是:
表格中的代码:
private void btn_Submit_Click(object sender, EventArgs e)
{
UpdateProgress.UpdateDataProgress updt = new UpdateProgress.UpdateDataProgress();
updt.ExecuteFucntion(progressBar1);
}
课堂代码:
public class UpdateDataProgress
{
public void ExecuteFucntion(System.Windows.Forms.ProgressBar progbar)
{
for (int i = 0; i < 100; i++)
{
progbar.Value = i;
}
}
}