我正在编写一个.NET UWP应用,用于实时监视Bluetooth LE设备。我在MainPage,Content Dialogs等中成功使用Realm DB。 为了接收BLE设备的数据,我定义了一个事件Characteristic_ValueChanged。 我的目标是在此事件期间写入Realm DB。
我的代码:
public sealed partial class MainPage : Page
{
public IQueryable<General> Generals { get; private set; }
public IQueryable<Person> Users { get; private set; }
private Realm realm = Realm.GetInstance();
public MainPage()
{
this.InitializeComponent();
Generals = realm.All<General>();
Users = realm.All<Person>();
}
// some other code, defined a GattCharacteristic.ValueChanged += Characteristic_ValueChanged;
void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
realm.Write(() =>
{
Users.ElementAt(id).Measurements.Add(new Measurement
{
Time = ...;
Value = ...;
});
});
}
}
不幸的是,由于“错误的线程错误” /“分配给另一个线程的接口”,导致Realm崩溃。
我尝试在事件内部创建一个新的Realm实例
void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
var realm2 = Realm.GetInstance();
var measurement = realm2.All<Person>().ElementAt(id).Measurements;
realm2.Write(() =>
{
measurement.Add(new Measurement
{
Time = ...;
Value = ...;
});
});
}
并致电
realm.Dispose()
在发生任何事件之前,在主线程(Main Page)中,但是我还是很不走运。我在文档中读到了关于ThreadSafeReference的一些内容,但是我不确定如何在我的情况下正确使用它,或者它是否对我有帮助。
如何在事件内写入Realm数据库? 谢谢!