petter2012 Ответов: 1

Как изменить значение после того, как произошло событие _click?


Я создаю небольшую игру в UWP, используя C# и физическую библиотеку.

После некоторой довольно болезненной отладки я обнаружил, что какой-то код был запущен за сценой после выполнения события _Click. Этот код должен сработать до того, как мой код события завершится.

Другими словами, это то, что я хочу, чтобы произошло:

1. пользователь нажимает кнопку
2. некоторый код выполняется через событие _Click
3. заключительные части этого кода извлекают некоторые атрибуты из списка, относящиеся к объекту, только что добавленному в список.

А сейчас происходит вот что:
1. пользователь нажимает кнопку
2. некоторый код выполняется через событие _Click
3. Заключительная часть кода пытается извлечь некоторые атрибуты, но поскольку они еще не были изменены в базовом коде, мой код выходит из строя.

У меня нет проблем с ожиданием нескольких миллисекунд или около того, прежде чем получить обновленный объект, поэтому я могу легко вырезать окончательный код и поместить его в метод, который запускается немного позже по времени (я бы предпочел это копанию в базовой библиотеке кода). Таким образом, я задаюсь вопросом, есть ли что-то похожее на событие Page_Loaded, происходящее после того, как базовый код был правильно обновлен.

Вот мой код _Click. На самом деле здесь нет ничего странного. Проблема в том, что базовый код запускается после закрытия этого метода. Мне нужен способ запустить больше кода после того, как этот базовый код закончит работу.
private void btnAddBomber_Click(object sender, RoutedEventArgs e)
{
    ucBomber bomber = new ucBomber();
    AddObjectRandomPosition(bomber, 50, 1000, 120, 120, 174, 100);
}


Что я уже пробовал:

Я пытался найти подходящее событие, но безрезультатно. Я не знаю, как это искать.

1 Ответов

Рейтинг:
5

OriginalGriff

Вы не можете запустить код "после" завершения обработчика событий, и нет ничего, что происходит автоматически после завершения обработчика событий - если только вы не добавили дополнительные обработчики к тому же событию, и в этом случае они будут выполняться по очереди. Поэтому проверьте событие и убедитесь, что вы не добавили второй или третий обработчик в список событий.

Чтобы доказать, в чем проблема, закомментируйте содержимое обработчика кликов - и я почти уверен, что ваша проблема исчезнет. Если это не так, то это совпадение, что это происходит, когда вы нажимаете кнопку, и вам нужно посмотреть на остальную часть вашего кода.
Если он действительно исчезнет, то начните с просмотра двух методов, которые вы вызываете из обработчика событий Click: ucBomber конструктор, а AddObjectRandomPosition метод.
Скорее всего, это второй вариант, и то, что он может делать, вызывает повторную покраску через добавление объекта, а какая-то часть обработчика краски вызывает вашу проблему.


petter2012

Большое спасибо за ваш ответ. Вина не в этих двух методах (список там еще не обновился), но я посмотрю на ваши другие предложения. Спасибо снова.