Даже если вы решили свою проблему, возможно, я смогу дать некоторое представление.XNA сильно отличается от классического рендеринга Silverlight.
В классическом конвейере рендеринга Silverlight вы декларативно создаете визуальное дерево и вносите в него изменения.Цикл рендеринга исчезает из поля зрения, и вам редко приходится с ним связываться.
Поэтому вы хотите как можно быстрее перенести свои изменения в визуальное дерево.Если вы обновите визуальное дерево в другом потоке, а не в потоке пользовательского интерфейса (который работает), обновление может произойти во время рендеринга, что будет катастрофическим.Поэтому поток пользовательского интерфейса предоставляет насос сообщений, который можно использовать через Dispatcher.BeginInvoke, для обеспечения безопасности потока.
С XNA у вас ничего этого нет ... Поскольку вы реализуете свой собственный конвейер рендеринга и имеетеполный контроль над ним.
Каждый раз, когда вы обрабатываете кадр веб-камеры, устанавливайте его в контроллере веб-камеры (используя блокировку).В каждом кадре XNA, если контроллер веб-камеры получил новый кадр, получите кадр веб-камеры (используя блокировку) и обновите текстуру XNA (не создавайте новую текстуру для каждого кадра, это НЕ эффективно).Затем визуализируйте ваш 3D-объект, используя эту текстуру.