【问题标题】:Getting "cross-thread operation not valid" even when using invoke method即使使用调用方法也得到“跨线程操作无效”
【发布时间】:2009-12-23 17:20:38
【问题描述】:

我在这里得到“跨线程操作无效”:

if ( vlc.State == VlcPlayerControlState.PLAYING )
        {
            if ( vlc.InvokeRequired )
            {
                vlc.Invoke( new MediaPlayerNoParameterDelegate( vlc.Stop ) );
            }
            else
            {
                vlc.Stop(); // debugger points here
            }
        }

调试显示 vlc 不需要调用。但是访问它的线程与创建它的线程不同。

我正在使用 libvlc.net 包装器播放声音,但问题不应该存在。 我怎样才能摆脱这个异常?

我使用的是线程而不是 backgroundworker。

谢谢!

【问题讨论】:

  • 试试这个。 Marshall 进入 ui 线程。调用vlc.stop 并获取它的返回值。现在创建一个新的 MediaPlayerNoParameterDelegate 实例

标签: .net invoke vlc multithreading


【解决方案1】:

听起来这是 libvlc.net 包装器中的一个错误。

我的建议是总是调用 vlc.Invoke(...)。当确实不需要调用时,您将遭受(小)性能损失,但如果您从单独的线程执行此操作,则始终需要它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多