我正在编写一个用于实时监控蓝牙 LE 设备的 .NET UWP 应用程序。我成功地在 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 因“错误的线程错误”/“分配给另一个线程的接口”而崩溃。
我试图在事件中创建一个新的领域实例
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 数据库?谢谢!