如何创建一个事件处理程序来报告我正在调用的方法内部的进度?

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));