如果您使用Mvvm Light(可能还有其他Mvvm框架),并且ViewModel中的代码运行在UI线程以外的线程上,那么在设计模式下尝试查看/编辑XAML时,VS2010和Exression Blend可能会崩溃。
<CheckBox Content="Switch 1"
IsChecked="{Binding Switch1.PowerState, Mode=TwoWay}"
Height="72" HorizontalAlignment="Left" Margin="24,233,0,0"
Name="checkBox1" VerticalAlignment="Top" Width="428" />
在Switch类(从ViewModelBase派生)中,我创建了一个计时器,它每5秒更改PowerState属性(从true到false,然后再返回)。
因为VS2010/Blend设计器在设计时运行我的代码,所以调用了此代码并触发了计时器。两个应用程序在我的计时器回调函数中都崩溃了。
解决方法很简单:
请记住,将不希望在设计时运行的任何代码包装到
IsInDesignMode
public OnOffSwitchClass()
{
if (IsInDesignMode)
{
// Code runs in Blend --> create design time data.
}
else
{
_timer = new System.Threading.Timer(TimerCB, this, TIMER_INTERVAL, TIMER_INTERVAL);
}
}
这帮我修好了。希望对你有帮助。