如何创建一个事件处理程序来报告我正在调用的方法内部的进度?
How do I create an event handler that can report progress from inside the method I am calling?
我找不到一个简单的例子,但我认为这是可能的。我正在调用一个方法。在该方法内部,它会循环很多次,每次循环时我都想通知调用方法并在那里附加一个事件,这样我就可以有一个状态栏来显示进度。
换句话说,我有一个带状态栏的 Winform,在那个 WinForm 应用程序中我调用了一个方法。在该方法中,循环迭代,我想以某种方式将该信息返回给 WinForm 应用程序,以便我可以更改状态栏。
if (fDialog.ShowDialog() == DialogResult.OK)
{
Session s = EncompassSession.Instance2(url, name, password);
DataTable dt = ExcelHelper.ReadAsDataTable(fDialog.FileName.ToString());
EncompassBoxHelper.UpdateBoxes(s, dt); //This is the main function that does the long process
s.End();
}
有多种选择,但一个简单的方法是让您的方法采用特殊的回调方法作为参数,然后在特定点调用该方法,提供上下文信息。
public void UpdateBoxes(Session s, DataTable dt, Action<ProgressInfo> updateProgress)
{
for (...)
{
...
updateProgress(new ProgressInfo(...));
}
}
然后可以这样调用该方法:
EncompassBoxHelper.UpdateBoxes(s, dt,
progress => UpdateProgressBar(progress));
我找不到一个简单的例子,但我认为这是可能的。我正在调用一个方法。在该方法内部,它会循环很多次,每次循环时我都想通知调用方法并在那里附加一个事件,这样我就可以有一个状态栏来显示进度。
换句话说,我有一个带状态栏的 Winform,在那个 WinForm 应用程序中我调用了一个方法。在该方法中,循环迭代,我想以某种方式将该信息返回给 WinForm 应用程序,以便我可以更改状态栏。
if (fDialog.ShowDialog() == DialogResult.OK)
{
Session s = EncompassSession.Instance2(url, name, password);
DataTable dt = ExcelHelper.ReadAsDataTable(fDialog.FileName.ToString());
EncompassBoxHelper.UpdateBoxes(s, dt); //This is the main function that does the long process
s.End();
}
有多种选择,但一个简单的方法是让您的方法采用特殊的回调方法作为参数,然后在特定点调用该方法,提供上下文信息。
public void UpdateBoxes(Session s, DataTable dt, Action<ProgressInfo> updateProgress)
{
for (...)
{
...
updateProgress(new ProgressInfo(...));
}
}
然后可以这样调用该方法:
EncompassBoxHelper.UpdateBoxes(s, dt,
progress => UpdateProgressBar(progress));