Это на самом деле не вопрос, а утверждение. Размещайте это так, чтобы другие могли избежать этой проблемы.
Если вы используете Mvvm-Light (и, возможно, другие фреймворки Mvvm) и у вас есть код в вашей ViewModel, который работает в потоке, отличном от потока пользовательского интерфейса, VS2010 и Exression Blend, вероятно, вылетят при попытке просмотреть / отредактировать ваш XAML в дизайне режим.
Например, у меня есть CheckBox, связанный со свойством, которое реализуется объектом, который обновляется в фоновом потоке:
<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) я создаю таймер, который меняет свойство PowerState каждые 5 секунд (с 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);
}
}
Это исправило это для меня. Надеюсь, это поможет вам.