在线程中执行时更改方法中的参数值

时间:2013-05-29 09:30:35

标签: c# .net multithreading

我想知道是否有一种方法可以在线程中运行时动态更改传递给方法的参数。

例如:

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

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

然后我想作为参数传递给运行值false的线程......是否可能? (在这个例子中,我想动态地改变参数值以退出线程内的循环而不使用全局变量)

感谢您的帮助。

1 个答案:

答案 0 :(得分: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