如何创建一个事件处理程序,可以从我调用的方法内部报告进度?

时间:2015-04-16 16:53:47

标签: c# winforms delegates event-handling

我找不到一个简单的例子,但我认为这是可能的。我打电话给一个方法。在该方法内部,它将循环多次,每个人都会循环遍历循环我想通知调用方法并在那里附加一个事件,所以我可以有一个状态栏来显示进度。

所以换句话说,我有一个带状态栏的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();
   }

1 个答案:

答案 0 :(得分:2)

有许多选项,但一个简单的选择是让您的方法将特殊的回调方法作为参数,然后在某些点调用该方法,提供上下文信息。

public void UpdateBoxes(Session s, DataTable dt, Action<ProgressInfo> updateProgress)
{
    for (...)
    {
        ...
        updateProgress(new ProgressInfo(...));
    }
}

然后可以调用这样的方法:

   EncompassBoxHelper.UpdateBoxes(s, dt, 
       progress => UpdateProgressBar(progress));