2009-08-07 13 views
2

我有一個應用程序,等待用戶按下一個鍵,然後執行定期更新GUI的長時間運行的方法。當方法運行時,我的WxPerl應用程序如何忽略按鍵?

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

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

我想有應用程序忽略,而doStuff方法是做什麼的事情發生的任何按鍵。

我想設置一個標誌和包裝的附加方法調用,如果沒有輸入語句,但是在kepress方法,直到doStuff完成。

我有點新的wxWidgets,感覺就像我不知道是什麼我不知道。任何關於下一步探索的建議都將不勝感激。

回答

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凍結,並且不提供任何反饋!

1

我會用某種形式的全球或單張,以確保該方法只有當它尚未運行運行。然後它將在隨後的擊鍵上退出。

相關問題