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

您可以创建一个共享变量,用于在两个线程之间进行通信

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 回答