IEventBroker订阅多次处理同一事件并处理不正确

时间:2018-05-22 12:14:43

标签: eclipse event-handling e4

我在compat层Eclipse RCP应用程序中引导IEventBroker

我有两种观点:TriggererReceiver

Triggerer(摘录):

private IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);

btn.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = viewer.getStructuredSelection();
        List selectionList = selection.toList();
        for (Object s : selectionList) {
            if (s instanceof MyObject) {
                matches.add(s);
            }
        }
        eventBroker.send(MyEventConstants.TOPIC_OBJECT_CHANGED, matches);
    }
}

Receiver(摘录):

@Override
public void handleEvent(Event event) {
    Object data = event.getProperty(EVENT_DATA);
    switch (event.getTopic()) {
    case MyEventConstants.TOPIC_OBJECT_CHANGED:
        try {
            if (data instanceof ArrayList) {
                List<MyObject> matches = null;
                try {
                    matches = (List<MyObject>) data;
                }
                catch (ClassCastException e) {
                }
                Subthing sub = buildSubthing(matches);
                getContentViewer().getContents()
                        .setAll(Collections.singletonList(sub));
            }
        }
        break;
    }
}

buildSubthing对相应的接收数据进行处理,并将其设置为GEF4编辑器的内容。

在某些情况下,这种情况很好,有些则不然。

handleEvent()被触发不止一次,虽然event hashCode总是相同的,我不明白为什么。主题是相同的,数据也是相同的。但是,buildSubthing只是暂停了一些数据,而不是其他数据。在这两种情况下,数据结构相同。

我如何控制调用handleEvent的频率,因为我认为调用的次数是Subthing有时未正确构建的原因?

0 个答案:

没有答案