Полученная ошибка является результатом ошибки «Отказано в доступе». Ваша функция начинает свою жизнь в потоке, отличном от самого GUI, в результате чего ей не разрешено изменять элементы GUI.
Это описано по этой ссылке: Метод, выполняющийся в потоке без пользовательского интерфейса, обновляет пользовательский интерфейс
Выше ссылка дает методы, чтобы убежать от проблемы. Тем не менее, нет единого решения для вашей проблемы. Следующее - только один из них. Он делает пошаговые изменения, которые вам нужно применить. (РЕДАКТИРОВАТЬ: я добавил другое решение в следующем ответе)
Добавьте using System.ComponentModel;
к своим заголовкам. Это использовать связки с изменяющимися свойствами. При необходимости добавьте справочный файл dll.
Теперь используйте этот заголовок для вашего класса:
public partial class CPUBase : Page,INotifyPropertyChanged
Следующий шаг - добавление уведомителей. Код используется как для .NET v4.0, обратитесь к Интерфейс INotifyPropertyChanged как использовать для других версий.
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
теперь создайте два поля свойства для хранения ваших изменяющихся значений. Обратитесь по ссылке выше для других версий.
string speed;
public string Speed
{
get
{
return speed;
}
set
{
speed= value;
NotifyPropertyChanged(nameof(Speed));
}
}
string volt;
public string Volt
{
get
{
return volt;
}
set
{
volt = value;
NotifyPropertyChanged(nameof(Volt));
}
}
Остальное теперь намного проще. просто измените эти свойства внутри вашей функции (дополнительные i
, чтобы показать, что она работает, поскольку значения не показывают немедленных изменений) (Правка: дополнения работают, но я не думаю, что код становится активным values
, я пытался уменьшить частоту процессора, и результат не изменился)
Speed = values[10] + "MHz"+i;
Volt = (Convert.ToDouble(values[11]) / 10).ToString() + " Volts"+i;
i++;
Теперь присвойте странице имя и обновите метки, привязав эти свойства.
<Page x:Name="CPUBaseMain ...
...
<Label x:Name="CPUClockSpeedText" Content="{Binding Speed, ElementName=CPUBaseMain}" ...
<Label x:Name="CPUCVoltageText" Content="{Binding Volt, ElementName=CPUBaseMain}" ...