为什么没有Dispatcher.RunAsync这个代码不会工作,它会做什么?没有Dispatcher在将值复制到textv.Text"时抛出错误这就是它在不同的线程"
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";
}
}
});
}
答案 0 :(得分:1)
事件Current_GeofenceStateChanged
在GUI线程之外被触发,只有GUI线程可以更改GUI元素。 Dispatcher.RunAsync
表示里面的代码应该在GUI线程上运行,因此它可以工作。
如果你把结果放在一个字符串变量上,如果你只放了:
就可以了 Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => textv2.Text = StringVariable;);
编辑:我之前只注意到你有XAML代码,你可以把字符串放在属性上,然后将属性绑定到文本框的文本值,让你从Dispatcher中解脱出来。 / p>
<TextBox Text="{Binding StringVariable}"/>
并且代码只有
public string StringVariable { get; set; }
而不是方法只是将值设置为属性
StringVariable = "bla bla";