По существу, у вас есть три варианта:
1) Посмотрите, завершил ли SpriteBatch свою работу, и затем вызовите SetData ().Методы рисования обычно являются асинхронными.Это означает, что они просто добавляются в очередь please-render-me, и метод немедленно возвращается.Вам нужно либо уведомление об обратном вызове после завершения рисования, либо синхронный вызов Draw ().
2) Чтобы избежать прерывания SetData ().Вы можете сделать это, поместив его в критический раздел, который я бы не рекомендовал.Должна быть возможность заблокировать данные текстуры.В Direct3D он называется LockRect (), в XNA он должен быть похожим.
3) Должен быть какой-то метод, например Flush (), который ожидает завершения всех операций, связанных с графикой.Извините за довольно расплывчатую помощь, но вы сможете найти имена методов из документа XNA.