1

メソッドがスレッドで実行されているときに、メソッドに渡されるパラメーターを動的に変更する方法があるかどうかを知りたいです。

例えば:

trdColCycl thread = new Thread (() => this.ColorsCycling (true));
trdColCycl.Start();

また

trdColCycl thread = new Thread (new ParameterizedThreadStart (this.ColorsCycling));
trdColCycl.Start(true);

そして、値を実行しているスレッドにパラメーターとして渡したいfalse...可能ですか? (この例では、グローバル変数を使用せずにパラメーター値を動的に変更して、スレッド内のループから抜け出したいと考えています)

ご協力いただきありがとうございます。

4

1 に答える 1

2

2 つのスレッド間で通信するための共有変数を作成できます

class ArgumentObject
{
    public bool isOk;
}

// later
thread1Argument = new ArgumentObject() { isOk = true };
TrdColCycl thread = new Thread (() => this.ColorsCycling (thread1Argument));
trdColCycl.Start();

// much later
thread1Argument.isOk = false;

編集:

または、代わりに bool を参照として渡すこともできます。

bool isOk = true;
TrdColCycl thread = new Thread (() => this.ColorsCycling (ref isOk));
trdColCycl.Start();

// later
isOk = false;

どちらの場合も、メソッドのシグネチャを変更する必要があります。

// original
void ColorsCycling(bool isOk)
// should be
void ColorsCycling(ArgumentObject argument) // for option 1
// or
void ColorsCycling(ref bool isOk) // for option 2
于 2013-05-29T09:36:14.943 に答える