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 オブジェクトでは、それを初期化したスレッドとは別のスレッドからそれらを参照できないということです。もしそうなら、私がやろうとしていることをするための最良の方法は何ですか? そうでない場合、誰かがこれを引き起こしている可能性があることを知っていますか?