为其他线程中的属性赋值

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;
}