(关于我之前的一个问题:Playing a Video (MSDN Tutorial))
我有以下问题:当我尝试读取XNA VideoPlayer对象的状态时,我得到CrossThreadMessagingException
。意思是,我试图从另一个线程中读取。这似乎是不允许的(我不知道线程如何在C#内部工作:-)
有关如何解决此问题的任何想法? (有没有办法告诉VideoPlayer对象写入缓冲区或什么?)
代码:
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
if (player.State == MediaState.Stopped) //Causes the exception
{
player.IsLooped = true;
player.Play(video); //Causes the "mysterious" crash
}
// ...
}
错误讯息:
player.State = 'player.State' threw an
exception of type
'Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException'
答案 0 :(得分:1)
是的,显然不仅仅是因为他有问题,因为我有完全相同的问题,在我的电脑上工作正常,移植到360和“BANG”“CRASH”“BOOM”。我正在其他论坛上工作,并在寻找答案时找到了这个。
杰森
Sylven游戏开发
答案 1 :(得分:0)
这很奇怪,因为Update方法在主线程上。它告诉我视频播放器已加载,或正在另一个线程上更新...你能否更新问题,详细说明你如何加载/初始化视频播放器?
答案 2 :(得分:0)
尝试将播放器设置为=新的VideoPlayer();进入更新方法(检查您是否已经创建过它)。
如果未在调试器中运行,是否会发生此错误?
此外,您的代码在开始尝试播放之前未检查视频内容的加载是否已完成 - 尝试在视频播放开始时延迟,并查看是否可以减少问题。
答案 3 :(得分:0)
我遇到过这个问题,可以肯定地说你在调试时看到了这个错误(单步执行代码)。这实际上是预期的行为,因为调试器本身试图从不同的线程访问(遗憾的是我无法找到支持此内容的源代码),但您的实际代码将能够正常访问该属性。 / p>
实际错误很可能是其他错误,例如无效的电影文件(请参阅此处了解视频要求:http://msdn.microsoft.com/en-us/library/dd254869.aspx)。