首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消WxPerl中的长时间操作

如何取消WxPerl中的长时间操作
EN

Stack Overflow用户
提问于 2014-07-08 21:21:58
回答 1查看 113关注 0票数 1

我有这样一个程序

代码语言:javascript
复制
...
$self->{bn1}=Wx::Button->new( $tb1, -1, 'Start');
EVT_BUTTON( $self, $self->{bn1}, \&on_click_start );
...
...

sub on_click_start
{
    my( $this, $event ) = @_;
    $this->{bn1}->SetLabel("Cancel");
    $event->Skip;
    for (...) {
        long_time_operation();
        last  if ( Cancel_clicked );
    }
}
...

我的问题是,当我单击on_click_start() Start按钮时,将调用,并且我希望将Start按钮的标签更改为Cancel,这允许我单击该按钮以打破long_time_operation()循环。

我如何为它制定正确的代码?

EN

回答 1

Stack Overflow用户

发布于 2014-10-31 07:53:39

尝试使用wxTimer并在您的on_click_start函数中启动它。将长时间的操作代码放在计时器的事件下(确保它不会重复触发,只需在那里停止计时器)。在您的长操作函数中,使用一些全局变量来了解是否要取消。在按钮出现的情况下,现在更改全局var的值,以便您的长期代码知道这一点,并取消/中断循环。

我不确定计时器事件下的循环是否可以挂起您的UI,但它似乎使用线程,因此可能不会发生这种情况。无论如何,当我需要这样的东西时,我总是使用wxTimer (不要挂起UI,不要直接使用线程)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24641831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档