我想在att = 5
中为thread t
分配值。在main thread
中,我想检查att
是否已分配给5
当我运行void check()
时,输出始终为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);
}
}
答案 0 :(得分:0)
您正在修改para
变量而不是att
变量,因此att
始终等于3.
尝试更改此内容:
static void set(int para)
{
para = 5;
}
要:
static void set(int para)
{
att = 5;
}
答案 1 :(得分:0)
更改para
方法中set()
的值不会对att
的原始值产生任何影响,除非您指定参数应通过引用传递。< / p>
此外,您需要在线程上调用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;
}