Почему я получаю исключение 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, что означает, что второй поток, к которому работает ваш компьютер, не будет иметь к нему доступа, и поэтому он будет нулевым.