- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有“运行”按钮的 wxLua Gui 应用程序。根据选择的选项,运行可能需要很长时间,所以我想实现一个“取消”按钮/功能。但看起来 wxLua 中的所有东西都在一个 Gui 线程上运行,一旦你点击 Run,按 Cancel 什么都不会,Run 总是会完成。
Cancel 基本上将一个变量设置为 true,并且正在运行的进程会定期检查该变量。但是运行时不会发生取消按钮按下事件。
我从未使用过协同程序;如果 Run 过程定期产生“取消检查”过程,那么 Cancel 事件会发生吗?
还是有其他方法?
最佳答案
(以下假设“运行”是指在同一进程中长时间运行的操作, 不是 使用 wxExecute 或 wxProcess 运行外部进程。)
“取消”事件不会被触发,因为通过执行您的运行逻辑,您还没有给 UI 处理点击事件的机会。
为避免阻塞 UI,您需要执行以下操作。当您单击“运行”按钮时,围绕要运行的函数创建一个协程:
coro = coroutine.create(myLongRunningFunction)
if coro then -- only if there is a coroutine to work on
local ok, res = coroutine.resume(coro, additional, parameters)
-- your function either yielded or returned
-- you may check ok to see if there was an error
-- res can tell you how far you are in the process
-- coro can return multiple values (just give them as parameters to yield)
if coroutine.status(coro) == 'dead' then -- finished or stopped with error
coro = nil
-- do whatever you need to do knowing the process is completed
end
end
event
参数,可以做
event:RequestMore(true)
请求更多 IDLE 事件 (
RequestMore)。
关于lua - wxLua - 如何实现取消按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412239/
我有一个带有“运行”按钮的 wxLua Gui 应用程序。根据选择的选项,运行可能需要很长时间,所以我想实现一个“取消”按钮/功能。但看起来 wxLua 中的所有东西都在一个 Gui 线程上运行,一旦
我有一个静态文本控件,可以根据用户操作更改其内容。它位于带有其他几个控件的水平大小调整器中。当文本更改时,控件会动态更新其大小,但不会动态调整其在 sizer 中的位置,即,它会与兄弟控件重叠,直到我
我打算创建一个新的 C++ 项目,在其中编写一些 C++ 函数,将带有 wxLua 的 Lua 引擎嵌入其中,使我的 C/C++ 函数可用于 Lua 端,然后编写我的主程序(包括GUI) 在 Lua
我使用 wxwdigets 做了一个类 //wrapper over wxIPV4address class IPV4addressLua : public wxIPV4address { p
我在 Linux 上编译 wxLua 时遇到了一些问题,在阅读安装指南几个小时后,我得到了以下文件: libwx.so libwxlua-wx28gtk2ud-2.8.12.3.so libwxlua
我是一名优秀的程序员,十分优秀!