WPF C# — асинхронный запуск кода, позволяющий завершить каждый фрагмент кода до запуска следующегоC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 WPF C# — асинхронный запуск кода, позволяющий завершить каждый фрагмент кода до запуска следующего

Сообщение Anonymous »

Я использую WPF C# для написания игры «Извини». При выборе «7» автоматический игрок получит множество вариантов, основанных на «перемещении 7» или «разделении хода». Попытка выполнить необходимые вычисления и показать анимацию на холсте. (Пример: игрок выбирает карту «7» и автоматически использует разделенный ход с двумя своими людьми. Кажется, что часть пользовательского интерфейса или перемещения выполняется одновременно для обоих мужчин, а часть принятия решений также отстает. сцены.
Проблема: анимация происходит одновременно, и расчеты не завершаются между действиями пользовательского интерфейса для движения одного человека и движения следующего человека (они все движутся и бегут). в то же время) Я этого не хочу.
for (int n = 0; n < 2; n++)
{
moveNo = (n == 0 ? cardNo1 : cardNo2);
splitChoice = (n == 0 ? choice : navNo);

SlideToProcess = (optList[splitChoice].Nav.Count > moveNo);
MovePlayerWherever(optList[splitChoice].Nav, optList[splitChoice].ManId);
UpdateNewLocation(optList, splitChoice);
if (SlideToProcess)
{
nThElement = GetTheNthElementOfTheNavList(optList[splitChoice].Nav, moveNo);
ProcessPerimeterSlide(nThElement, optList[splitChoice].ManId);
}

if (!LimitMsg)
{
CurrentStatus += string.Format("\nCard: '{0}' -- {1} ({2}) Moved '{3}' space(s)",
"SEVEN", GetPlayerColor(playerNo), optList[splitChoice].ManId, moveNo);
}
}


- I know this has been hashed out in many ways, but I still don't have a workable solution.
Thank you for your help. (I am using some await and async for the animations, which partially works, but both animations happen at the same time & calculation code too).
Tom Bateman

------ UPDATE -----
I created a new method below and updated a few of
my methods to be async Task... This appears to be working.
The new method calls each of the tasks with 'await'. Here is
the new method code ...

public async void ProcessStandardNumbers(int cardNumber)
{
int playerNo = GAME.CurrentPlayer; // 0 .. 3 (YELLOW, GREEN, RED, BLUE)
List optList;
List< AnimatePerMtg> navEnds;
bool autoPlay = AutoArray[playerNo];
int nThElement, moveValue;

moveValue = Math.Abs(GetCardMoveValue(cardNumber));
optList = BuildChoiceListWithAllPlayersMen(playerNo, moveValue); // Has full SLIDE list...
ChoiceStringList = BuildNewChoiceStringList(optList);
if (ChoiceStringList.Count > 0)
{
if (autoPlay)
{
navEnds = BuildNavListEnds(optList);
await Automatic_NavChoice(playerNo, navEnds);
if (ChoiceId == FORFEIT_MOVE)
{
DoForfeitMessage(GetCardName(cardNumber));
return;
}
}
else
PlayerDecision(ChoiceStringList.Count);

// let 'UpdateNewLocation' know, the slide will perform the update...
SlideToProcess = (optList[ChoiceId].Nav.Count > moveValue);
await MovePlayerWherever(optList[ChoiceId].Nav, optList[ChoiceId].ManId);
await UpdateNewLocation(optList, ChoiceId); // Updates last location on slide, then removes
if (SlideToProcess)
{
nThElement = GetTheNthElementOfTheNavList(optList[ChoiceId].Nav, moveValue);
await ProcessPerimeterSlide(nThElement, optList[ChoiceId].ManId);
}
}
else
DoForfeitMessage(GetCardName(cardNumber))
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... inish-befo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»