0

这是我的测试代码:

  class Program
{
    static void Main(string[] args)
    {
        new Thread(delegate() { runThread(); }).Start();

        Console.WriteLine(Global.test);
        Console.ReadKey();
    }
    private static void runThread()
    {
        Console.WriteLine("this is run thread");
        Global.test = "this is test from thread";

        Console.WriteLine(Global.test);
    }
}
public class Global
{

    public static string testV { get; set; }
}

我希望能够用线程设置“testV”值。看起来 Thread 确实设置了值,但是当从 main 方法中检索 testV 值时,它什么也没给出。这是为什么?

4

2 回答 2

4

无法保证Global.test在您的主线程调用时已设置WriteLine。要查看效果,您可以尝试在写出之前先睡一会儿,以证明其他线程已对其进行了修改。

此外,值得注意的是全局静态testV不是线程安全的,因此未定义的行为会在您的未来出现。

于 2013-05-30T07:28:52.973 回答
1

在您的特定情况下Console.WriteLine(Global.test);,比runThread. 最简单的方法是使用Join

var thread = new Thread(delegate() { runThread(); }).Start();
thread.Join();

Console.WriteLine(Global.test);

但这绝对不适用于生产代码(手动线程创建也是如此)。

于 2013-05-30T07:29:11.960 回答