2

我正在编写一个用于实时监控蓝牙 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 数据库?谢谢!

4

0 回答 0