Я пишу приложение .NET UWP для мониторинга в режиме реального времени устройства Bluetooth LE. Я успешно использую Realm DB в MainPage, Content Dialogs и т. Д.
Для получения данных устройства 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()
в главном потоке (главной странице), прежде чем произойдет какое-либо событие, но мне все еще не повезло Я прочитал в документации кое-что о ThreadSafeReference , но я не уверен, как правильно использовать его в моем случае или если это поможет мне.
Как я могу написать в базу данных Realm в рамках мероприятия?
Спасибо!