【问题标题】:XNA VideoPlayer object causes 'CrossThreadMessagingException'XNA 视频播放器对象导致“CrossThread MessagingException”
【发布时间】:2011-05-03 20:03:00
【问题描述】:

(关于我之前的一个问题: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'

【问题讨论】:

  • 这是一个调试器异常;这不是真正的问题。

标签: c# multithreading exception xna


【解决方案1】:

是的,显然不仅仅是他有问题,因为我有完全相同的问题,在我的电脑上工作正常,端口到 360 和“BANG”“CRASH”“BOOM”。我正在其他论坛上研究它,并在寻找答案时发现了这个。

杰森

Sylven 游戏开发

【讨论】:

    【解决方案2】:

    这很奇怪,因为 Update 方法在主线程上。它向我暗示视频播放器已加载,或者正在另一个线程上更新...您能否更新问题,详细说明您如何加载/初始化视频播放器?

    【讨论】:

    • 您可以在此处找到代码:msdn.microsoft.com/en-us/library/…(在页面顶部下载 VideoPlayback_Sample.zip)以及错误图片:img846.imageshack.us/i/unbenanntru.png 我的猜测是问题是特定于硬件的。 (或至少特定于 DirectX,因为这是调用的地方)
    • 啊,我明白了......所以问题出在示例提供的代码上?
    • 是的,但不仅如此。 (顺便说一句。代码在我的笔记本电脑和 Xbox 上运行良好)
    • 是的,承认这很糟糕,但这听起来确实是您在发生这种情况的机器上设置的特定问题。除了检查更新的视频驱动程序之外,不确定还有什么真正要做的吗?
    【解决方案3】:

    试着把 player = new VideoPlayer();进入更新方法(检查您是否尚未创建它等)。

    当不在调试器中运行时是否会出现此错误?

    此外,在您开始尝试播放视频内容之前,您的代码并未检查视频内容的加载是否已完成 - 尝试在视频播放开始时延迟,看看这是否能减少问题。

    【讨论】:

      【解决方案4】:

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

      实际错误很可能是其他原因,例如无效的电影文件(有关视频要求,请参见此处:http://msdn.microsoft.com/en-us/library/dd254869.aspx)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多