我有这样一个程序
...
$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()循环。
我如何为它制定正确的代码?
发布于 2014-10-31 07:53:39
尝试使用wxTimer并在您的on_click_start函数中启动它。将长时间的操作代码放在计时器的事件下(确保它不会重复触发,只需在那里停止计时器)。在您的长操作函数中,使用一些全局变量来了解是否要取消。在按钮出现的情况下,现在更改全局var的值,以便您的长期代码知道这一点,并取消/中断循环。
我不确定计时器事件下的循环是否可以挂起您的UI,但它似乎使用线程,因此可能不会发生这种情况。无论如何,当我需要这样的东西时,我总是使用wxTimer (不要挂起UI,不要直接使用线程)。
https://stackoverflow.com/questions/24641831
复制相似问题