2

我有一个应用程序等待用户按下一个键,然后执行一个长时间运行的方法来定期更新 GUI。

sub keypress{
  my $self = shift;
  my $event = shift;

  if ($event->GetKeyCode() == WXK_F12){
      $self->doStuff();
  }else{
      $event -> Skip(0);
  }
}

我想让应用程序忽略 doStuff 方法执行此操作时发生的任何按键。

我尝试设置一个标志并将方法调用包装在一个附加的 if 语句中,但是直到 doStuff 完成后才输入kepress方法。

我对 wxwidgets 有点陌生,感觉我不知道我不知道什么。任何关于下一步探索的建议将不胜感激。

4

2 回答 2

4

我不确定这是在 WxWidgets 框架中忽略事件的最佳方式(因为您可能真的不想在每次执行操作时都冻结 GUI!),但是设置一个标志应该没问题。只要确保你使用了一个守卫,即使堆栈由于异常而展开,你的标志也不会设置:

use Guard;
my $flag;

sub keypress{
    my $self = shift;
    my $event = shift;

    if ($event->GetKeyCode() == WXK_F12 && !$flag){
        $flag = 1;
        scope_guard { $flag = 0 };

        $self->doStuff();
    }
    else {
        $event->Skip(0);
    }
}

不过,您可能真的想显示一个进度条,或者可能只禁用一个操作。没有人希望他们的 GUI 冻结而不提供任何反馈!

于 2009-08-07T04:24:04.483 回答
1

我会使用某种全局或单例来确保该方法仅在它尚未运行时运行。然后它将在随后的击键时退出。

于 2009-08-07T16:20:34.973 回答