System.StackOverflowException WPF MVVM [英] System.StackOverflowException WPF MVVM
本文介绍了System.StackOverflowException WPF MVVM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 MVVM 在 WPF 中创建一个简单的数字时钟.我有一个带有绑定的标签.背后的代码很简单,每秒引发一个属性更改事件,我有一个 stackoverflow 异常.有人可以帮忙吗?
I am trying to create a simple digital clock in WPF using MVVM. I have a label which has a binding. The code behind is simple simple and raising a property changed event each second and I have a stackoverflow exception. Can someone please help ?
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private string _lblValue;
public string LabelValue
{
get
{
UpdateLabel();
return _lblValue;
}
set
{
_lblValue = value;
OnPropertyChanged(LabelValue);
}
}
private void UpdateLabel()
{
_lblValue = System.DateTime.Now.ToString();
//System.Threading.Thread.Sleep(2000);
OnPropertyChanged("LabelValue");
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propName));
}
}
}
推荐答案
正如 har07 所解释的那样,它是一个无限的 UI 循环.这是我对这个问题的修复.
As har07 explained it is a infinite UI loop. Here is my fix for this issue.
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
Task.Run(() => UpdateLabel());
}
private string _lblValue;
public string LabelValue
{
get
{
return _lblValue;
}
set
{
_lblValue = value;
OnPropertyChanged();
}
}
private void UpdateLabel()
{
while (true)
{
LabelValue = System.DateTime.Now.ToString();
System.Threading.Thread.Sleep(1000);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propName = null)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propName));
}
}
}
这篇关于System.StackOverflowException WPF MVVM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文