1

我已将变量定义为 ThreadStatic:

public static class MyApplicationContext {
    [ThreadStatic]
    public static bool Monitoring;
}

现在,我应该从 MainThread (已启动新线程)设置变量 Monitoring:

this.syncThread = new Thread(this.InternalWork);
this.syncThread.SetApartmentState(ApartmentState.STA);
this.syncThread.Start();
// now, I should access MyApplicationContext.Monitoring of syncThread.

有没有办法做到这一点?

4

1 回答 1

1

我的理解是 ThreadStatic 总是相对于线程。如果您指示要阅读的线程适合您,则可以获取此信息。

您还可以将静态值设为对象,然后让该线程将引用添加到要监视的中心位置。您仍然会遇到确保对该对象的更改定期同步或将其设置为易失性的问题。

通过手动同步或将其设置为 volatile,您消除了它是线程本地的许多好处。如果您的 ThreadStatic 对象是一个可以更改的数据结构,您还需要小心。尝试读取不断变化的数据结构的主线程可能会引发异常,或者更糟糕的是,返回错误数据。

我没有使用 ThreadStatic 的经验,所以我只根据我的知识进行。

于 2014-06-06T15:40:11.323 回答