它並不完全回答你的問題,但你可能想看看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