У меня есть приложение XNA, которое никогда не вызывает Draw()
(и update()
ни разу не вызывается). Он многопоточный. В частности, он содержит набор объектов, каждый из которых вызывает свою собственную функцию рисования.
Функция рисования выглядит следующим образом:
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
foreach (Interaction<InteractionState> interaction in interactions){
interaction.display(spriteBatch); //this calls the SpriteBatch Draw function
}
spriteBatch.End();
Взаимодействия — это объекты, которые обновляются пользовательским устройством ввода, работающим в отдельном потоке.
Когда у меня есть только одно или два из этих взаимодействий, все работает довольно быстро, но когда я начинаю ставить 3 или более, рисование останавливается. Поскольку он работает с двумя взаимодействиями, я убежден, что проблема не в чем-то вроде избыточных вызовов загрузки контента или ошибки в вызове spritebatch.begin/end дважды.
Мое предположение состоит в том, что прямо сейчас увеличение количества входных источников увеличило вычислительную нагрузку на этот поток до такой степени, что у него никогда не будет возможности вызвать Draw. Как я могу заставить игру рисовать и иметь приоритет над другим потоком? Я попытался установить скорость
this.TargetElapsedTime = TimeSpan.FromSeconds(1.0f / 10.0f);
и никакого бездействия:
this.InactiveSleepTime = TimeSpan.Zero;
Оба в Initialize()
, и ни один не сделал свое дело.
Редактировать: люди, кажется, сбиты с толку (я, вероятно, не совсем правильно выразился), но я ТОЛЬКО пытаюсь привлечь внимание к основной теме. Я НЕ пытаюсь рисовать в фоновом потоке. Основной метод рисования никогда не вызывается.
Редактировать 2: я также могу сказать, что если я заставлю свой фоновый поток спать на 150 мс за раз, система начнет рисовать. Однако для моих целей это слишком низкая частота кадров.