gpt4 book ai didi

silverlight - VS2010 for Windows Phone 7 & Blend 崩溃与 Mvvm-Light

转载 作者:行者123 更新时间:2023-12-01 06:47:18 25 4
gpt4 key购买 nike

这不是一个真正的问题,而是一个断言。发布此内容以便其他人可以避免此问题。

如果您使用 Mvvm-Light(可能还有其他 Mvvm 框架)并且您的 ViewModel 中的代码在 UI 线程以外的线程上运行,VS2010 和 Exression Blend 在尝试在设计模式下查看/编辑您的 XAML 时可能会崩溃。

例如,我有一个 CheckBox 绑定(bind)到由在后台线程上更新的对象实现的属性:

<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);
}
}

这为我修好了。希望它可以帮助你。

最佳答案

您也可以使用 DispatcherTimer而不是定时器。您将失去一点准确性,但另一方面,回调将在 UI 线程上调用,这可能会阻止(或不)崩溃。

关于silverlight - VS2010 for Windows Phone 7 & Blend 崩溃与 Mvvm-Light,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com