它并不完全回答你的问题,但你可能想看看this MSDN article.它讨论了WPF使用它们的对象和Dispatcher模型以及Dispatcher,DispatcherObject和DispatcherSynchronizationContext类的方法。
他们推荐的单个对象是从DispatcherObject继承(这可能不适合您的情况),并在公共访问中调用继承的VerifyAccess()方法。
public class ThreadOwnedObject : DispatcherObject
{
private string field;
public string ExposedProperty
{
get { return field; }
set
{
VerifyAccess();
field = value;
}
}
}
而且调用将使用内置的Dispatcher。
ThreadOwnedObject ownedInstance = new ThreadOwnedObject();
ownedInstance.Dispatcher.Invoke(new Action(() => ownedInstance.ExposedProperty = "foo"));
或者,如果还是DispatcherSynchronizationContext在文章中不适合您的需求,我想,你很可能创建一个由握住Thread.CurrentThread.ManagedThreadId当对象是模仿DispatcherObject的机制创建并针对每个暴露访问的值执行检查。除此之外或者其他等价物,我不认为有一种内置的机制将随机对象与给定的线程关联起来。
是的,好吧,这或多或少是我所做的。除了它会破坏我的程序,如果我不允许暴露对象(我需要在js中基本禁用eval)。我真正想要的是线程获取对象所有权的某种方式,比如在GUI编程中发生的事情,如果我尝试从后台线程更新属性,它会抛出异常。但我想这是内置于GUI组件本身: - /。 – Alxandr