2

Windows Phone 8 用の Tic-Tac-Toe ゲームを作成しており、メイン メニューの背景としてゲーム自体を再生したい

private Button[] bts;
private List<Button> temp = new List<Button>();
private int[,] winningConditions;
private int counter;
private string Board;

public MainPage()
{
    InitializeComponent();
    bts = new[] { _1, _2, _3, _4, _5, _6, _7, _8, _9 };
    winningConditions = new[,] { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 0, 3, 6 },
    { 1, 4, 7 }, { 2, 5, 8 }, { 0, 4, 8 }, { 2, 4, 6 } };
    counter = 0;
    bTextFont();
}

private void NewGame()
{
    foreach (Button i in bts)
        i.Content = "";//here I get an Exception saying Invalid cross-thread access
    while (true)
    {
        NearlyHuman();
        someOneWon();
        counter++;
    }
}
private void form_Loaded(object sender, RoutedEventArgs e)
{
    Thread backGround = new Thread(new ThreadStart(NewGame));
    backGround.Start();
}
4

2 に答える 2

16

他のスレッドから UI スレッドに直接アクセスすることはできません。したがって、Dispatcher.BeginInvoke() で UI アクセス コードをエンコードします。

Dispatcher.BeginInvoke(() =>
    {
        foreach (Button i in bts)
           i.Content = "";
    });
于 2012-11-28T13:06:47.113 に答える
0
  • バックグラウンド ワーカーを利用します。

Windows Phone 8の場合: http://msdn.microsoft.com/en-us/library/windows/apps/cc221403(v=vs.105).aspx

于 2014-11-29T19:50:56.003 に答える