我正在尝试用 C#/XAML 制作一个简单的游戏。我有一个工作线程,它计算每个刻度的游戏元素的新位置,然后用新位置更新 UI。或者至少应该是。
相反,输出显示:
A first chance exception of type 'System.Exception' occurred in Game.exe
An exception of type 'System.Exception' occurred in Game.exe but was not handled in user code
The thread '<No Name>' (0x1218) has exited with code 0 (0x0).
我已经用断点筛选了这个,代码在这个区域中断了。
//Stop previous animation in case it is ongoing
GameStoryboard.Stop();
//Remove all previous timelines from the storyboard
foreach (Timeline timeline in GameStoryboard.Children)
{
GameStoryboard.Children.Remove(timeline);
}
那里的第一行代码使它崩溃,但我可以注释掉 GameStoryboard.Stop() 行(它仅在游戏的滴答时间在循环之间自动降低的情况下才相关),然后它只是在 foreach 循环上崩溃。如果我注释掉 foreach 循环,它会在我下次引用 GameStoryboard 时崩溃。
GameStoryboard 的声明如下所示:
<Canvas Name="GameCanvas" Height="900" Width="1440" Background="Blue">
<Canvas.Resources>
<Storyboard x:Name="GameStoryboard"/>
</Canvas.Resources>
</Canvas>
我能想到的唯一理论是,XAML 对象是否不允许您从与初始化它的线程不同的线程引用它们?如果是这样,做我想做的最好的方法是什么?如果没有,有人知道是什么原因造成的吗?