【发布时间】:2016-11-29 15:25:44
【问题描述】:
不确定这是否可能,但我浏览了文档,它给我的印象是领域是围绕这种东西构建的。我正在尝试监听在后台线程中对领域对象所做的更改。
下面列出的代码将向领域添加一个 Post 对象,读取该对象并监听它的属性更改事件。当我直接更新该对象时,会引发该事件。但是当我在另一个线程上读取对象并对其进行更新时,我希望主线程上的对象能够获得更新,但事实并非如此。我错过了什么吗?
var realm = Realm.GetInstance();
string newPostID = Guid.NewGuid().ToString();
realm.Write(() => {
var newPost = realm.CreateObject<Post>();
newPost.ID = newPostID;
newPost.Count = 0;
});
var post = realm.All<Post>().Where(item => item.ID == newPostID).FirstOrDefault();
post.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
{
// Changed
};
Realm.GetInstance().Write(() =>
{
var threadPost = Realm.GetInstance().All<Post>().Where(item => item.ID == newPostID).FirstOrDefault();
threadPost.Count++;
// This will trigger the PropertyChanged event
});
Task.Run(() => {
for (int i = 0; i < 5; i++)
{
System.Threading.Thread.Sleep(500);
Realm.GetInstance().Write(() =>
{
var threadPost = Realm.GetInstance().All<Post>().Where(item => item.ID == newPostID).FirstOrDefault();
threadPost.Count++;
// This will not trigger the PropertyChanged event on the main thread
});
}
});
【问题讨论】:
标签: ios multithreading xamarin xamarin.ios realm