OnDropFiles启动持久功能

时间:2014-03-12 12:08:12

标签: drag-and-drop wxwidgets wxperl

使用wxperl我希望在将文件拖到窗口后启动一个持久的功能。这是我的DropTarget代码:

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使用删除的文件作为参数调用函数& runner()。) 一切都很好,除了Windows上的拖动源窗口被阻止,而function& runner()正在工作,这可能是一个持久的操作。在OnDropFiles返回1之后,拖动源窗口再次变得可用,因此在& runner()准备好之后。

是否有机会在& runner()完成之前取消阻止拖动源?

1 个答案:

答案 0 :(得分:-1)

不要立即调用该函数,而是推迟执行此操作直到下一个事件循环迭代。如果3.x CallAfter()被wxPerl包装,您应该使用它。如果没有,请使用通常的wxEVT_IDLE技巧手动模拟它:为此事件设置一个处理程序,检查一个标志并调用你的函数(如果已设置(并重置))并在OnDropFiles()中设置此标志