为其他线程中的属性赋值
assign value to attribute in other thread
我想给 thread t
中的 att = 5
赋值。在 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);
}
}
您正在编辑 para
变量而不是 att
变量,因此 att
将始终等于 3。
尝试改变这个:
static void set(int para)
{
para = 5;
}
收件人:
static void set(int para)
{
att = 5;
}
在 set()
方法中更改 para
的值不会对 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;
}
我想给 thread t
中的 att = 5
赋值。在 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);
}
}
您正在编辑 para
变量而不是 att
变量,因此 att
将始终等于 3。
尝试改变这个:
static void set(int para)
{
para = 5;
}
收件人:
static void set(int para)
{
att = 5;
}
在 set()
方法中更改 para
的值不会对 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;
}