【问题标题】:Background worker run worker completed后台工作者运行工作者完成
【发布时间】:2011-05-09 21:58:20
【问题描述】:

根据 do 工作方法,我的结果可能是字符串列表或字节 [] 列表

我们如何查看RunWorkerCompletedEventArgs e -

if (e is List<String>)

这是正确的检查方法吗?

【问题讨论】:

    标签: c# backgroundworker


    【解决方案1】:

    不,这不是正确的方法。
    正确的方法是这样使用:

    if(e.Result is List<string>)
    {
        //...
    }
    else if(e.Result is List<byte[]>)
    {
        //...
    }
    else
    {
        //...
    }
    

    e 将始终是 RunWorkerCompletedEventArgs 类型。但是这个类包含一个属性Result,它包含您的DoWork 事件处理程序的结果。就是这个,你需要检查一下。

    【讨论】:

      【解决方案2】:

      是的,这是一种可能的方法。

      如果你只有两种类型,那就很容易了:

      if(e.Result is List<string>)
      {
      }
      else if(e.Result is List<byte[]>)
      {
      }
      else
      {
      }
      

      但是,如果您必须支持的不仅仅是两个或三个,那么问题就来了。在这种情况下,我将创建一个Dictionary&lt;Type, Action&lt;object&gt;&gt; 并为每种类型编写单独的函数。像这样的:

      var supportedTypes = new Dictionary<Type, Action<object>>();
      supportedTypes.Add(typeof(List<string>), ComputeListOfStrings);
      supportedTypes.Add(typeof(List<byte[]>), ComputeListOfByteArrays);
      
      private void ComputeListOfString(object listOfStrings)
      {
          var list = (List<string>)listOfStrings;
      }
      
      private void ComputeListOfByteArrays(object listOfByteArrays)
      {
          var list = (List<byte[]>)listOfByteArrays;
      }
      

      这使得支持新类型变得更加简单,并且在 if-else-if 遇到顺序问题时也保持为 O(1)。

      在您的后台工作人员中使用如下:

      worker.OnRunWorkerCompleted += (sender, e) =>
      {
          Action<object> supportedAction;
      
          supportedTypes.TryGetValue(e.Result.GetType(), out supportedAction);
      
          if(supportedAction != null)
          {
              supportedAction();
          }
      };
      

      【讨论】:

      • 不应该总是得出错误的结果,因为实际上是 RunWorkerCompletedEventArgs 吗?
      • @rik:是的,但我认为这是问题中的错误。我觉得应该是RunWorkerCompletedEventArgs.Result
      【解决方案3】:

      e.Result 是您的结果的属性,因此要获取您可以执行的类型:

      if(e.Result.GetType().Equals(typeof(List<String>)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 2011-10-30
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多