gpt4 book ai didi

swt - Display.getCurrent().asyncExec 不能并行运行?

转载 作者:行者123 更新时间:2023-12-04 16:42:07 27 4
gpt4 key购买 nike

这是我的代码:

Display.getCurrent().asyncExec(new Runnable() {
public void run() {
try {
Event e1 = new Event();
e1.type = EVT_CONNECTING;
for (Listener listener : listeners) {
listener.handleEvent(e1);
}
database = new Database(cp.getName(), cp.getConnection());
Event e2 = new Event();
e2.type = EVT_CONNECT_SUCCESS;
for (Listener listener : listeners) {
listener.handleEvent(e2);
}
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
Event e = new Event();
e.text = ex.getMessage();
e.type = EVT_CONNECT_FAILD;
for (Listener listener : listeners) {
listener.handleEvent(e);
}
}
}
});

在上面的代码中,我尝试连接到数据库。有时这需要很长时间才能给出响应(例如网络连接超时),但是当 Runnable 开始运行时,用户界面失去响应。为什么?

最佳答案

您正在 UI 线程上运行此数据库连接 Runnable - 这意味着您正在使 UI 线程无法处理任何其他可能导致它绘制、响应点击事件等的消息。所以是的,当您运行时此数据库连接作业,您的 UI 将无法执行任何其他操作,并且 UI 将变得无响应。

你可能做 而不是 想在 UI 线程上运行这个数据库连接作业,你可能想在一个简单的后台线程中完成,然后在数据库连接作业完成后使用 Display#asyncExec 将结果发布回 UI 线程完成的。

关于swt - Display.getCurrent().asyncExec 不能并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6994720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com