1

そのため、マルチスレッドに参加したいメソッドに引数を渡そうとしています。だから、私は次のようなコードを書きました:

    new Thread (Go(ineedthis)).Start();
    Go();

  static void Go(string ineedthis)
  {
    lock (locker)
    {
      if (!done) { Console.WriteLine ("Done"); done = true; }
    }
  }

ineedthisただし、最初の行のように挿入するとエラーが発生するため、引数を渡すことはできません。逆に、メソッドのスレッドを作成するときに引数を指定しないと、エラーも発生します。

では、スレッドを作成するときに、どのようにして引数をメソッドに渡すのでしょうか。

ありがとう!注:昨日c#を開始したばかりなので、これはまったく新しいものです。よく説明してください。

編集-エラー:

Error   1   The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' has some invalid arguments     23  21  test


Error   2   Argument 1: cannot convert from 'method group' to 'System.Threading.ParameterizedThreadStart'   23  32  test
4

5 に答える 5

3

私はあなたがこのような何かを探していると思います:

  var t = new Thread (Go); 
t.Start(ineedthis);

最初に、バックグラウンドスレッドで実行したときにメソッドがどのようになるかを詳しく説明するスレッドを作成します。次に、スレッドを開始し、必要に応じてパラメータを渡します。詳細については、 MSDNを参照してください。

于 2012-07-10T19:08:46.957 に答える
1

ParameterizedThreadStart代理人が必要です:

new Thread (Go).Start(ineedthis);

object ineedthisメソッドのシグネチャは、ではなく、である必要がありますstring ineedthis

static void Go(object ineedthis)
{
  string data = (string)ineedthis;
  lock (locker)
  {
    if (!done) { Console.WriteLine ("Done"); done = true; }
  }
}
于 2012-07-10T19:11:02.390 に答える
1

これには、タスク並列ライブラリを使用できます。

Task.Factory.StartNew(() => Go("test"));
于 2012-07-10T19:14:58.170 に答える
0

これも機能するはずです:

new Thread (() => Go(ineedthis)).Start();

これは、メソッド呼び出しを、に割り当て可能なゼロ引数ラムダ内にラップしますThreadStart

于 2012-07-10T19:30:37.890 に答える
0
    Thread workerThread = new Thread (() => go("example"));
    workerThread.Start();
于 2014-03-19T21:10:19.947 に答える