为什么没有Dispatcher我的代码不能工作.RunAsync在地理围栏

本文关键字:RunAsync 工作 不能 Dispatcher 我的 代码 为什么 | 更新日期: 2023-09-27 18:15:29

为什么这段代码没有Dispatcher就不能工作。RunAsync和它做什么?没有Dispatcher,它在复制值到textv时抛出错误。Text " that its on different thread"

     async void Current_GeofenceStateChanged(GeofenceMonitor sender, object args)
    {
        var reports = sender.ReadReports();
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            foreach (var report in reports)
            {
                GeofenceState st = report.NewState;
                Geofence gf2 = report.Geofence;
                if (st == GeofenceState.Entered)
                {
                    textv2.Text = "Hello"; //XAML TEXT
                }
                else if(st==GeofenceState.Exited)
                {
                    textv2.Text = "Bye";
                }
            }
        });
    }

为什么没有Dispatcher我的代码不能工作.RunAsync在地理围栏

事件Current_GeofenceStateChanged在GUI线程之外被触发,只有GUI线程可以改变GUI元素。Dispatcher.RunAsync说里面的代码应该在GUI线程上运行,这样它才能工作。

如果你把结果放在一个字符串变量上,如果你只放:

  Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => textv2.Text = StringVariable;);

EDIT:我只注意到你有XAML代码,你可以把字符串放在属性上,并将属性绑定到文本框的文本值,让你从Dispatcher中解脱出来。

<TextBox Text="{Binding StringVariable}"/>

和代码上的

public string StringVariable { get; set; }

而不是将值设置为

属性
StringVariable = "bla bla";