从另一个线程(事件)写入Realm

时间:2019-05-14 22:21:38

标签: c# .net uwp realm-database

我正在编写一个.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数据库? 谢谢!

0 个答案:

没有答案