多个属性监听器等待两者触发回调
Posted
技术标签:
【中文标题】多个属性监听器等待两者触发回调【英文标题】:Multiple property listeners wait for both to trigger callback 【发布时间】:2015-10-07 01:38:15 【问题描述】:我在 Matlab 中遇到了一些关于属性监听器的问题。我为轴的XLim
和YLim
属性添加了一个侦听器,在PostSet
上触发:
h = addlistener(myaxes,'XLim','YLim','PostSet',@myfunc);
现在我希望我的程序在两个属性都改变后做一些事情,或者如果只有一个改变了,但在后一种情况下,我必须确保另一个没有改变。
在坐标区上使用缩放工具时,属性总是会同时发生变化,并且总是按照x
,然后是y
的顺序发生变化。所以在这种情况下我不会有问题,但有时我以编程方式设置XLim
或YLim
属性并希望触发相同的功能。不知何故,我必须能够判断这两个属性中是否只有一个触发了侦听器,或者两者都触发了。
在当前阶段,我的回调执行了两次:一次用于XLim
,一次用于YLim
。我希望它只执行一次,并且恰好在我知道这两个属性没有进一步变化之后。你知道怎么做吗?
【问题讨论】:
【参考方案1】:我不相信可以直接检测到“同时”的set
,因为实际的属性分配,而不仅仅是PostSet
事件,是单独执行的,没有额外的信息传递给@ 987654323@ 回调,让您知道另一个即将到来。在第一个回调中的断点处停止,轴完全更新为新的XLim
,没有任何迹象表明即将更改为YLim
。
根据您对代码使用方式的假设以及您的优先事项,有很多方法可以组合出解决方法。我能想到的都至少使用以下原则之一:
在某个阶段使用计时器允许可能的YLim
分配在完成XLim
PostSet
回调的工作之前触发第二个回调
为不带YLim
的XLim
分配创建一个自定义例程,以在某种程度上与缩放工具等工具进行的分配区分开来
利用缩放工具首先设置XLimMode
属性的事实,无论其值是否发生变化。如果XLimMode
的值已经是manual
,则以编程方式设置XLim
将不会设置XLimMode
。
【讨论】:
以上是关于多个属性监听器等待两者触发回调的主要内容,如果未能解决你的问题,请参考以下文章