MediaElement.CurrentState检索System.Exception

时间:2015-09-15 09:21:26

标签: c# windows-10 c#-5.0 windows-10-mobile

我需要多次从findFont获取import QtQuick 2.5 import QtQuick.Controls 1.4 ApplicationWindow { id: app visible: true width: 640 height: 480 function findFont(object) { if (object.font) return object.font; var font = null; for (var index = 0; index < object.children.length && !font; ++index) font = findFont(object.children[index]); return font; } Column { anchors.centerIn: parent Button { anchors.horizontalCenter: parent.horizontalCenter text: "Button 1" width: 300 height: 100 } Button { anchors.horizontalCenter: parent.horizontalCenter text: "Button 2" width: 300 height: 100 Component.onCompleted: { findFont(this).pixelSize = 50; // On Android and Qt 5.5, this is equivalent : //children[0].children[1].children[1].children[1].font.pixelSize = 50; } } } } 。我创建了一个看起来像这样的简单函数:

CurrentState

但每次调用此函数时我都会得到:

  

MyProject中发生了'System.Exception'类型的异常,但未在用户代码中处理。

     

附加信息:该应用程序调用了一个为不同线程编组的接口。

     

(例外情况来自HRESULT:0x8001010E(RCP_E_WRONG_THREAD))

我一直在研究这个问题,正如我所理解的那样,通常是在MediaElement事件被解雇之前尝试检索 private string getCurrentState(MediaElement m) { return m.CurrentState.ToString(); } 时。实际上,这不适合我的情况,因为此后调用此函数。但是我调用了CurrentState属性我得到了相同的异常,而这一切的最奇怪的事情是有时候有效,有时候没有,所以我定义不知道代码中有什么问题:S

有没有人知道如何修复它?

1 个答案:

答案 0 :(得分:1)

您正试图从非ui线程获取状态。您应该重新设计代码,以便不与后台线程(Task)中的MediaElement交互。 或者您可以将getCurrentState方法调用包装到Despatcher

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);