C# 在线程开始内部传递参数

C# 在线程开始内部传递参数,c#,multithreading,C#,Multithreading,是否可以在threadstart内部传递参数以开始执行该方法 int value = 123; Thread t = new Thread(new ThreadStart(fail.DoWork(value))); Class fail { public void DoWork(int Value) } 我还可以如何在DoWork中传递此参数?您可以试试 int value = 123; fail objfail = new fail(); var t = new Thread(

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

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


Class fail
{
  public void DoWork(int Value)
}
我还可以如何在DoWork中传递此参数?

您可以试试

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

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

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

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

我相信你也可以用lambda Expression做一些类似

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表达式的唯一真正区别在于,您不必显式地使用参数编写包装函数。

我相信您也可以使用lambda expression来完成类似于

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表达式的唯一真正区别在于,您不必显式地使用参数编写包装函数。

我相信您也可以使用lambda expression来完成类似于

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表达式的唯一真正区别在于,您不必显式地使用参数编写包装函数。

我相信您也可以使用lambda expression来完成类似于

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表达式的唯一真正区别在于,您不必显式地使用参数编写包装函数。

我更喜欢这种语法:

int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();
我更喜欢这种语法:

int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();
我更喜欢这种语法:

int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();
我更喜欢这种语法:

int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();
在这种情况下,您需要:

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);
  }
}
在这种情况下,您需要:

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);
  }
}
在这种情况下,您需要:

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);
  }
}
在这种情况下,您需要:

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

抛出错误“dowork匹配的委托”系统没有重载。线程。参数化线程启动“编辑了我的答案。请立即重试抛出错误“dowork匹配的委托”系统没有重载。线程。参数化线程启动“编辑了我的答案”。请尝试NOWTROWS错误“dowork匹配的代理”系统没有重载。线程。parameterizedthreadstart编辑了我的答案。请尝试NOWTROWS错误“dowork匹配的代理”系统没有重载。线程。parameterizedthreadstart编辑了我的答案。请现在试一试