Написать в Царство из другого потока (события) - PullRequest
2 голосов
/ 15 мая 2019

Я пишу приложение .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 в рамках мероприятия? Спасибо!

...