在C ++ / winrt应用程序中,我能够处理堆栈面板中的单击并通过更改面板背景来做出响应。但是,如果我从KeyDown事件处理程序为主页调用相同的方法,则面板的外观不会改变。两次对面板背景更改的调用都发生在SHCore.dll线程之一上,我想知道为什么它们不在“主线程”上。按如下方式使用调度程序仍然使我处于SHCore线程上:
Window::Current().Dispatcher().RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, [this, theKey,&handled]
{
handled = PressLetterKey(theKey);
});
由于触发keydown处理程序中的更改没有明显效果,我开始怀疑这是否是线程问题。然而,在功能和非功能情况下,线程的确出现了相同的情况,而clickhandler和keydown处理程序都在堆栈面板上调用了相同的方法-这里的线程可能是问题,还是还有其他问题为什么面板在按下按键时不显示外观变化?
当然,触发不必一定是按下键盘-我只是问问是否可以通过编程方式切换堆栈面板的外观...例如,如果某个人想眨一下按钮。
答案 0 :(得分:0)
好的,我又一次犯了一个愚蠢的错误,但是这里可以解决的是线程问题的答案。是的,至少在这里,SHCore线程是UIThread。 “主线程”是另外一回事。任何click事件或keydown事件都会到达UI线程上,可以立即采取行动,无需调用调度程序。就我而言,我正在触发大量堆栈面板之一中的更改,并且-我认为自己触发的那个实际上不是正确的;触发的项目只是在屏幕外...所以就在那里!