0

スレッドで 1 つのパラメータを送信できます

class myThread
{
    Thread thread;
    public myThread(string name, int st)
    {
        thread = new Thread(this.Get_IP);
        thread.Name = name;
        thread.Start(st);//передача параметра в поток
        thread.Join();
    }
    void Get_IP(object st)
    {
        for (int ii = 0; ii < (int)st; ii++)
        {
            // smth
        }
    }
}

しかし、たとえば2つ送信する必要があります

for (int ii = (int)st; ii < (int)fi; ii++)
{
    // smth
}

2つのパラメーターをすべてまとめる方法があります

void A(int a, int b) { }

ThreadStart starter = delegate { A(0, 10); };

しかし、どうすればそれらをスレッドに送信できますか?

4

5 に答える 5

3

ラムダ式を使用して、より多くのパラメーターをスレッドに渡すことができます。このような:

Thread thread = new Thread(()=>A(5,6));
于 2012-09-08T16:43:40.720 に答える
1

渡す必要のあるすべての値を保持するクラスを作成し、そのクラスのインスタンスをスレッドに渡します。

于 2012-09-08T16:42:39.997 に答える
1

2つのパラメーターを送信する必要がある場合は、好きなタイプとして送信できますが、新しいスレッドを開始するメソッドで、それ/それらをボックス化解除する必要があります:

    void MyMethod()
    {           
        int a = 1;
        int b = 2;
        int[] data = new[] { a, b };
        Thread t = new Thread(new ParameterizedThreadStart(StartThread));
        t.Start(data);
    }

    private void StartThread(object obj)
    {
        int[] data = obj as int[];
        if (data != null)
        {
            int a = data[0];
            int b = data[1];
        }
    }

注: new Thread によって呼び出されるメソッドは、accppt オブジェクト パラメーターのみを使用できます。このオブジェクトの中身はコードの問題ではなく、I box 2 integers のように何でもかまいません。次に、オブジェクトを元のデータ型にボックス化解除するだけです。

于 2012-09-08T16:46:42.223 に答える