2014-03-12 8 views
0

wxperl을 사용하여 내 창으로 파일을 드래그 한 후 오래 지속되는 기능을 시작하고 싶습니다.OnDropFiles는 오래 지속되는 기능을 시작합니다.

package FilesDropTarget; 

use strict; 
use Wx qw[:allclasses]; 
use base qw(Wx::FileDropTarget); 

sub new { 
    my $class = shift; 
    my $caller = shift; 
    my $fref = shift; 
    my $this = $class->SUPER::new(@_); 
    $this->{caller} = $caller; 
    $this->{fref} = $fref; 
    return $this; 
} 

sub OnDropFiles { 
    my($this, $x, $y, $files) = @_; 

    &{$this->{fref}}($this->{caller},@$files); 

    return 1; 
} 

이 모듈은

$frame->{TextControl}->SetDropTarget(FilesDropTarget->new($frame,\&runner)); 

가 (. OnDropFiles가 매개 변수로 떨어졌다 파일과 기능 & 주자()를 호출)

모든 통해 사용을 제외하고, 잘되어 여기 된 DropTarget 내 코드입니다 기능이 & 인 runner()가 작동하는 동안 Windows의 드래그 소스 창은 차단되어 잠재적으로 오래가는 작업입니다. OnDropFiles이 1을 반환하면 끌기 소스 창이 다시 사용 가능 해지고 & 러너()가 준비된 후 다시 사용할 수있게됩니다.

& 러너()가 끝나기 전에 드래그 소스를 차단 해제 할 가능성이 있습니까?

답변

-1

즉시 함수를 호출하지 말고 다음 이벤트 루프 반복까지 연기하십시오. 3.x CallAfter()이 wxPerl로 래핑 된 경우 사용해야합니다. 그렇지 않다면 보통 wxEVT_IDLE 트릭을 사용하여 수동으로 에뮬레이션합니다.이 이벤트에 대한 처리기를 사용하여 플래그를 확인하고 설정되어 있으면 함수를 호출하고 다시 설정하고 OnDropFiles()에이 플래그를 설정합니다.

+0

올바른 방향을 가리키는 데 대해 감사드립니다. – leu