为什么没有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";
}
}
});
}
事件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";