【问题标题】:Passing parameter inside thread start [duplicate]在线程启动内传递参数[重复]
【发布时间】:2014-02-03 09:22:45
【问题描述】:

是否可以在threadstart内部传递一个参数来开始执行该方法?

int value = 123;
Thread t = new Thread(new ThreadStart(fail.DoWork(value)));


Class fail
{
  public void DoWork(int Value)
}

我还能如何在 DoWork 中传递这个参数?

【问题讨论】:

    标签: c# multithreading


    【解决方案1】:

    你可以试试

     int value = 123;
     fail objfail = new fail();
     var t = new Thread(() => objfail.DoWork(value));
     t.Start();
    

    【讨论】:

    • 抛出错误“'dowork'匹配委托'system.threading.parameterizedthreadstart'没有重载
    • 编辑了我的答案。请立即尝试
    【解决方案2】:

    在这种情况下你需要ParameterizedThreadStart

    void Main()
    {
        Fail fail = new Fail();
        int value = 123;
        Thread t = new Thread(fail.DoWork); // same as: new Thread(new ParameterizedThreadStart(fail.DoWork));
        t.Start(value);
    }
    
    public class Fail
    {
      public void DoWork(object value)
      {
        Console.WriteLine("value: {0}", value);
      }
    }
    

    【讨论】:

      【解决方案3】:

      我相信你也可以用 lambda expession 来做......

      Thread t = new Thread(new ThreadStart( () => fail.DoWork(value)));
      

      我花了一些时间来理解 lambda,但基本上上面一行中发生的事情是这样的。

      调用没有参数的函数(就像普通调用一样)。这由 () 表示。该函数的实际定义是在 => 之后,它使用参数进行调用。这与您执行以下操作相同。

      currentMethodStartingTheThread()
      {
         Thread t = new Thread(new ThreadStart( CallAsParameterized() );
      }
      
      void CallAsParameterized()
      {
         int value = 123;
         fail.DoWork(value);
      }
      
      
      Class fail
      {
        public void DoWork(int Value)
        { do whatever with the parameter value )
      }
      

      通过 lambda 表达式唯一真正的区别是您不必显式编写带有参数的包装函数。

      【讨论】:

        【解决方案4】:

        我更喜欢这种语法:

        int value = 123;
        var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
        t.Start();
        

        【讨论】:

          猜你喜欢
          • 2015-03-21
          • 1970-01-01
          • 2016-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多