MediaElement.CurrentState 检索 System.Exception
MediaElement.CurrentState retrieves System.Exception
我需要多次从 MediaElement
中获取 CurrentState
。我创建了一个简单的函数,如下所示:
private string getCurrentState(MediaElement m)
{
return m.CurrentState.ToString();
}
但是每次调用这个函数时我都会得到这个:
An exception of type 'System.Exception' occurred in MyProject but was not handled in user code.
Additional information: The application called an interface that was marshalled for a different thread.
(Exception gfrom HRESULT: 0x8001010E (RCP_E_WRONG_THREAD))
我一直在调查这个问题,据我了解,它通常出现在 MediaOpened
事件被触发之前尝试检索 CurrentState
时。实际上,这不适合我的情况,因为此函数在此之后被调用。但是我调用 CurrentState
属性 我得到了同样的异常,最奇怪的是有时有效,有时无效,所以我完全不知道代码中有什么问题: S
有人知道如何解决吗?
您正在尝试从非ui 线程获取状态。您应该重新设计代码,使其不与后台线程(任务)中的 MediaElement 交互。
或者您可以将 getCurrentState 方法调用包装到 Despatcher
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
我需要多次从 MediaElement
中获取 CurrentState
。我创建了一个简单的函数,如下所示:
private string getCurrentState(MediaElement m)
{
return m.CurrentState.ToString();
}
但是每次调用这个函数时我都会得到这个:
An exception of type 'System.Exception' occurred in MyProject but was not handled in user code.
Additional information: The application called an interface that was marshalled for a different thread.
(Exception gfrom HRESULT: 0x8001010E (RCP_E_WRONG_THREAD))
我一直在调查这个问题,据我了解,它通常出现在 MediaOpened
事件被触发之前尝试检索 CurrentState
时。实际上,这不适合我的情况,因为此函数在此之后被调用。但是我调用 CurrentState
属性 我得到了同样的异常,最奇怪的是有时有效,有时无效,所以我完全不知道代码中有什么问题: S
有人知道如何解决吗?
您正在尝试从非ui 线程获取状态。您应该重新设计代码,使其不与后台线程(任务)中的 MediaElement 交互。 或者您可以将 getCurrentState 方法调用包装到 Despatcher
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);