【问题标题】:Passing Method name and Arguments dynamically to thread.Start将方法名称和参数动态传递给 thread.Start
【发布时间】:2013-10-08 10:50:48
【问题描述】:

修改一个老问题:

我有一种方法可以大大简化我的线程,但我在向它传递多个参数时遇到问题!

public static Thread StartThread(ParameterizedThreadStart targetMethod, object argument)
{
            Thread result = null;

            result = new Thread(targetMethod);

            result.Start(argument);
            return result;
} 

有什么方法可以将多个参数传递给result.Start(argument)?还是有其他方法可以在保持可扩展性的同时做到这一点?

任何帮助都会很棒:)

谢谢~丹尼尔

【问题讨论】:

    标签: c# multithreading object parameters arguments


    【解决方案1】:

    很简单

    static void targetMethod(object obj)
    {
        Tuple<string, int> tuple = (Tuple<string, int>)obj;
        Console.WriteLine(tuple.Item1);
        Console.WriteLine(tuple.Item2);
    }
    
    static void Main(string[] args)
    {
        Thread thread = new Thread(targetMethod);
        thread.Start(new Tuple<string, int>("simple string", 123));
        thread.Join();
        Console.ReadLine();
    }
    

    【讨论】:

      【解决方案2】:

      您可以将对象参数中的Tuple 对象传递给StartThread 方法。另一种首选方式可能是传递一些 classinterface 的对象而不是元组。

      object population = new Tuple<string, int>("a", 1);
      

      将包含元组的对象类型转换回targetMethod中的元组。

      private void  targetMethod(object t)
      {
          Tuple<string, int> t = (Tuple<string, int>)population;
          string yourStringVariable = t.Item1;  
          int yourIntVariable = t.Item2;
      }
      

      【讨论】:

      • 此时将对象转换为接口而不是元组不是更有效吗?这样我就可以把参数写成 => 表达式
      • 你可以将任何东西传递给对象可能是接口,你需要 Func 使用表达式 IMO
      • 什么会跑得更快?这个方法被调用了很多,所以对我来说优化这段代码的运行时是值得的。
      • 您可以通过调用它们的次数并使用 StopWatch 获取调用前后的时间来计算这两种方法所用的时间
      • 我会试一试并报告!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多