将值赋给其他线程中的属性
我想在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