【发布时间】:2010-10-06 22:10:42
【问题描述】:
我的视图模型在其构造函数中创建了一个 BackgroundWorker。 BackgroundWorker 从其 DoWork 事件处理程序更新模型的属性。下面的代码是一个人为的例子(ViewModelBase 几乎一字不差地取自 MVVM 论文)。
public class MyViewModel : ViewModelBase
{
public int MyProperty
{
get
{
return this.my_property;
}
private set
{
if (this.my_property != value)
{
this.my_property = value;
this.OnPropertyChanged("MyProperty");
}
}
}
public MyViewModel()
{
this.worker = new BackgroundWorker();
this.worker.DoWork += (s, e) => { this.MyProperty = 1; };
this.worker.RunWorkerAsync();
}
}
我的视图绑定到这个视图模型:
public partial class MyPage : Page
{
public MyPage()
{
InitializeComponent();
this.DataContext = new MyViewModel();
}
}
问题是我的应用程序在显示我的页面时会间歇性地崩溃。这肯定与 XAML 中的工作线程和数据绑定有关。似乎如果我从页面的 Loaded 事件处理程序内部启动工作程序,问题就会消失,但由于难以一致地重现,我不确定这是否是正确的解决方案。
有没有人有任何建议或想法可能是什么原因?
编辑:如果我在没有调试器的情况下运行它,我只能重现它。而系统日志中的错误是ShowDialog抛出的InvalidOperationException,帮助不大。在调试器下它运行良好。
感谢您的帮助 康斯坦丁
【问题讨论】:
标签: wpf multithreading mvvm