我需要多次从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
有没有人知道如何修复它?
答案 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>);