将值赋给其他线程中的属性

我想在thread t中将值赋给att = 5。在main thread,我希望当我运行void check()检查att已经分配给5尚未将值赋给其他线程中的属性

,输出始终3。为什么是这样?

class Program 

{

static int att = 3;

static void Main(string[] args)

{

Thread t = new Thread(() => set(att));

t.Start();

check();

}

static void set(int para)

{

para = 5;

}

static void check()

{

while (att != 5)

{

Console.WriteLine(att);

}

Console.WriteLine(att);

}

}

回答:

更改值为para在你的set()方法不会对原始值att有任何影响,除非你指定该参数应该通过引用传递。

此外,您需要在线程上调用Join()以确保在线程实际完成修改之前,它不会尝试将值打印到控制台。

static void Main(string[] args) 

{

Thread t = new Thread(() => set(ref att));

t.Start();

t.Join();

check();

}

static void set(ref int para)

{

para = 5;

}

回答:

您正在编辑的para变量,而不是att变量,以便att永远等于3.

尝试改变这一点:

static void set(int para) 

{

para = 5;

}

要:

static void set(int para) 

{

att = 5;

}

以上是 将值赋给其他线程中的属性 的全部内容, 来源链接: utcz.com/qa/265953.html

回到顶部