Я работаю над простой игрой в крестики-нолики, используя xamarin. Я также создал однопользовательский режим, в котором процессор играет против вас. проблема в том, что ЦП делает ход сразу после того, как игрок выполняет его ход, поэтому я хочу добавить задержку и отобразить на экране «ЦП думает» примерно на секунду, прежде чем выполнить остальную часть кода. поэтому я создал новую тему
Thread animationThread = new Thread(new ParameterizedThreadStart(CPUAnimation))
{
IsBackground = true
};
animationThread.Start(infoText);
чтобы сделать это, поскольку я не хочу использовать thread.sleep в основном потоке. это код для метода:
private static void CPUAnimation(object infTxt)
{
// Animation "CPU is thinking"
TextView infoText = (TextView)infTxt;
while (true)
{
if (cpuIsThinking)
{
infoText.Text = "CPU is thinking.";
Thread.Sleep(333);
infoText.Text = "CPU is thinking..";
Thread.Sleep(333);
infoText.Text = "CPU is thinking...";
Thread.Sleep(333);
cpuIsThinking = false;
}
Thread.Sleep(100);
}
}
это код одного из квадратов (кнопок):
button1.Click += delegate
{
if (!(infoText.Text.EndsWith("wins!")) && !(infoText.Text.EndsWith(".")) && !cpuIsThinking && one == ' ')
{
one = 'X';
button1.Text = "X";
bool win = CheckPlayer(infoText);
if (!win)
{
cpuIsThinking = true;
while (true)
{
if (!cpuIsThinking)
{
int result = CPU(infoText, first);
CPUChoice(result, button1, button2, button3, button4, button5, button6, button7, button8, button9);
CheckCPU(infoText);
break;
}
}
}
}
};
но графический интерфейс зависает, когда я нажимаю любую кнопку, и приложение вылетает с этой ошибкой из Visual Studio:
Android.Util.AndroidRuntimeException: Only the original thread that created a view hierarchy can touch its views.
, Я знаю, что делаю что-то не так, поскольку у меня нет большого опыта работы с потоками в C # или вообще, на самом деле.
(быстрое примечание: «инфотекст», который передается в качестве параметра, - это текстовое представление, которое я использую для отображения любой информации игроку, и мне нужно передать ее, поскольку я не могу получить к ней доступ любым другим способом, насколько я знаю, так что было бы здорово, если бы кто-то мог также сказать мне, если есть лучший способ сделать это)