我想在电池百分比发生变化时更新textblock
。我在Windows.Phone.Devices.Power.Battery命名空间中找到了事件RemainingChargePercentChanged
。但是每当调用eventhandler
并且我尝试更新textblock
时,我都会遇到错误。
错误是:
System.UnauthorizedAccessException
中出现System.Windows.ni.dll
类型的例外情况,但未在用户代码中处理。
我是否要在AppManifest
文件中选择任何功能?如果是,那该怎么办?
任何帮助将不胜感激。 以下是我的代码,
public partial class MainPage : PhoneApplicationPage
{
private readonly Battery _battery;
// Constructor
public MainPage()
{
InitializeComponent();
_battery = Battery.GetDefault();
_battery.RemainingChargePercentChanged += OnRemainingChargePercentChanged;
UpdateUI();
}
private void OnRemainingChargePercentChanged(object sender, object e)
{
UpdateUI();
}
private void UpdateUI()
{
sampletext.Text = string.Format("{0} %", _battery.RemainingChargePercent);
}
}
答案 0 :(得分:0)
问题是在另一个线程上调用事件处理程序,如果你读取了异常消息,它会说Invalid cross-thread access.
解决方案是使用Text
更改UI线程上的Dispatcher
属性,如下所示:
Dispatcher.BeginInvoke(() => {
sampletext.Text = string.Format("{0} %", _battery.RemainingChargePercent);
});
编辑:或您的整个UpdateUI函数调用:
private void OnRemainingChargePercentChanged(object sender, object e)
{
Dispatcher.BeginInvoke(() => {
UpdateUI();
});
}