XNA VideoPlayer对象导致'CrossThreadMessagingException'

本文关键字:CrossThreadMessagingException VideoPlayer 对象 XNA | 更新日期: 2023-09-27 17:54:23

(关于我之前的一个问题:播放视频(MSDN教程))

我有以下问题:当我试图读取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'

XNA VideoPlayer对象导致'CrossThreadMessagingException'

显然不只是他有问题,因为我有完全相同的问题,在我的电脑上运行良好,移植到360和"砰"崩溃"BOOM"。我正在其他论坛上工作,在寻找答案时发现了这个。

杰森

Sylven Game Development

这很奇怪,因为Update方法在主线程上。这表明视频播放器已经加载,或者正在另一个线程上更新…你能更新问题的细节,你是如何加载/初始化视频播放器?

尝试将player = new VideoPlayer();在更新方法(检查你还没有创建它等)。

当不在调试器中运行时是否发生此错误?

此外,你的代码没有检查视频内容的加载是否已经完成之前,你开始尝试播放它-尝试延迟当视频播放开始,看看这是否减少了问题。

我遇到过这个问题,可以肯定地说,您在调试(逐步执行代码)时看到了这个错误。这实际上是预期的行为,因为调试器本身正试图从不同的线程访问(不幸的是,我找不到我读到的支持这一点的源代码),但您的实际代码将能够访问该属性。

实际的错误很可能是其他的东西,比如无效的电影文件(查看这里的视频需求:http://msdn.microsoft.com/en-us/library/dd254869.aspx)。

相关文章:
  • 没有找到相关文章