Почему я получаю исключение NullReferenceException в следующем коде C#?

У меня есть следующая тестовая программа, где я использую ThreadStatic переменная, когда я пытаюсь этот код, я получаю NullReferenceException,

using System;
using System.Threading;

namespace MiscTests
{
    public class Person
    {
        public string Name { get; set; }
    }

    class Program
    {
        [ThreadStatic]
        private static Person _person = new Person { Name = "Jumbo" };

        static void Main(string[] args)
        {
            Thread t1 = new Thread(TestThread);
            t1.Start();
            Thread t2 = new Thread(TestThread1);
            t2.Start();         
            Console.ReadLine();
        }

        private static void TestThread(object obj)
        {
            Console.WriteLine("before: " + _person.Name);
            _person.Name = "TestThread";
            Console.WriteLine("after: " + _person.Name);
        }

        private static void TestThread1(object obj)
        {
            Console.WriteLine("before: " + _person.Name);
            _person.Name = "TestThread1";
            Console.WriteLine("after: " + _person.Name);
        }       
    }
}

Кто-нибудь может объяснить это, пожалуйста?

2 ответа

Инициализатор [ThreadStatic] Переменная будет запускаться только один раз в потоке, который инициализирует тип.

Все остальные темы увидят null,

Если я не ошибаюсь, вы объявили _person как ThreadStatic, что означает, что второй поток, к которому работает ваш компьютер, не будет иметь к нему доступа, и поэтому он будет нулевым.

Другие вопросы по тегам