【问题标题】:Background Worker ReportProgress method后台工作者 ReportProgress 方法
【发布时间】:2013-05-27 14:26:36
【问题描述】:

ReportProgress 方法接受 2 个参数。一个是 int,一个是用户状态。我将一些字符串参数传递给方法以用于某些处理目的,并且不需要 int。

有没有一种方法可以省略传递第一个 int 而没有冗余来使用 ReportProgress([randomInt], "MyString") 调用报告进度方法?仅用于代码清理目的。

【问题讨论】:

  • 不,只需传递 0。或者如果您愿意,可以使用一个名为 dummyProgress 的常量。 :)
  • 有没有办法像覆盖方法一样创建?这个“无用参数”的东西让我有点烦 =)
  • 哈哈好吧给我一秒钟。 :)
  • 好的,我写了一个覆盖方法供你用作扩展方法(我猜这就是你所说的覆盖方法的意思)。

标签: c# backgroundworker


【解决方案1】:

你可以像这样为 BackgroundWorker 创建一个扩展方法:

public static class BackgroundWorkerExt
{
    public static void ReportProgress(this BackgroundWorker self, object state)
    {
        const int DUMMY_PROGRESS = 0;
        self.ReportProgress(DUMMY_PROGRESS, state);
    }
}

那么你就可以做到以下几点(只要参数不是int,否则会调用普通的ReportProgress(int)):

_backgroundWorker.ReportProgress("Test");

【讨论】:

    【解决方案2】:

    ReportProgress 方法需要采用 int,因为它引发了 ProgressChanged 事件,该事件有一个参数 ProgressChangedEventArgs,而该参数又具有一个属性 ProgressPercentage。 p>

    只需将 0 传递给方法,或者按照 RobSiklos 的建议,编写一个扩展方法,使用 0 调用 ReportProgress

    【讨论】:

      【解决方案3】:

      您可以创建一个隐藏第一个参数的扩展方法(只需使用0 调用真实方法)

      【讨论】:

      • 如何创建扩展方法?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-10-30
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多