在Eclipse RAP中如何将push/force当前UI状态发送给客户端?

In Eclipse RAP how to push/force current UI state to the client?

我正在使用 Eclipse RAP 并有以下用例:

问题,即使在实际搜索开始之前标签应该更改为"searching....",但它更改为"searching...."搜索完成后。

我正在寻找的是一种在标签更改后,在搜索之前 push/force/update 向客户端发送当前 UI 状态的方法:

这里有一些示例代码:

    Label statusLabel = new Label(parent, SWT.NONE);
    Text searchText = new Text(parent, SWT.SEARCH);
    searchText.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            // change label
            statusLabel.setText("searching...");

            // HERE force client update

            // start searching
            Display.getCurrent().asyncExec(new Runnable() {
                @Override
                public void run() {
                    // do actual search
                }
            });
        }
    });

asyncExec 仍然 运行 是 UI 线程中的代码,它只是稍微延迟它直到下一次调用 Display.readAndDispatch。所以您的搜索代码仍然会阻塞并且不允许标签更新。

您实际上需要 运行 在单独的线程中进行搜索。

asyncExec 旨在在可能的情况下在后台线程中使用 运行 UI 线程中的少量代码。 (您需要在后台线程中使用 Display.getDefault() 而不是 Display.getCurrent() )。

因此,在您的后台线程中,您可以执行以下操作:

while (more to do)
 {
   .... do a step of the search

   Display.getDefault().asyncExec(.... UI update code ....);
 }