我已经定义了一个变量为ThreadStatic:
public static class MyApplicationContext {
[ThreadStatic]
public static bool Monitoring;
}
现在,我应该从主线程(它已经启动了新线程)设置变量Monitoring:
this.syncThread = new Thread(this.InternalWork);
this.syncThread.SetApartmentState(ApartmentState.STA);
this.syncThread.Start();
// now, I should access MyApplicationContext.Monitoring of syncThread.
有办法做到这一点吗?
我的理解是ThreadStatic总是相对于线程的。如果您指示线程为您读取is,则可以获得此信息。
您还可以将静态值设置为对象,然后让该线程将引用添加到要监视的中心位置。您仍然需要确保对该对象的更改定期同步或将其设置为volatile。
通过手动同步或将其设置为volatile,您删除了它作为线程本地的许多好处。如果ThreadStatic对象是一个可能改变的数据结构,您还需要小心。当你的主线程试图读取一个改变的数据结构时,可能会抛出异常,或者更糟,返回错误的数据。
我没有ThreadStatic的经验,所以我只基于我的知识。