1

Jetbrains MPS中,我想在用户点击快捷方式或上下文菜单中的操作时执行 Web 请求。

成功执行此请求后,我想通过操作 MPS 模型向用户显示响应。

当我在 UI 线程中执行 web 请求时,ui 将被阻止,直到我得到响应或请求超时。

这会导致糟糕的用户体验。

如何异步执行请求?

4

1 回答 1

1

Web 请求必须在单独的线程中执行 - afaik MPS 没有对ForkJoinPools的完整 JDK8 支持;我在这个例子中使用了老式的方法。

此外,您需要引用ModelAccess才能更改 MPS 模型。模型更改代码必须在 UI 线程中执行。

图片显示了一个执行异步任务并在 2Sek 后更改模型的行为方法。

SwinUtilities.invokeAndWait用于在 UI 线程中执行代码并包装modelAccess.executeCommand模型更改代码。

是概念的this.asyncUpdate属性,由概念编辑器显示。

正在执行的任务:

<iframe src='https://gfycat.com/ifr/DisfiguredAdeptAmericanbittern' frameborder='0' scrolling='no' allowfullscreen width='640' height='213'></iframe><p> <a href="https://gfycat.com/disfiguredadeptamericanbittern-mps">via Gfycat</a></p>

于 2019-04-13T09:31:13.160 回答