在flex 3中的目录列表期间,应用程序变得无响应

时间:2011-06-11 06:50:31

标签: flex actionscript

我设计了一个AIR应用程序,它显示包含位于C:\目录中的所有txt文件的列表。我使用了以下代码:

var videoListsArr:ArrayList = new ArrayList();
var folder:File = new File(driveName+":\\");
folder.getDirectoryListingAsync();
folder.addEventListener( FileListEvent.DIRECTORY_LISTING, handleDirectoryListing );
private function handleDirectoryListing( event:FileListEvent ):void
{       
    for each(var item:File in event.files)
    {               
        var itemExtn:String = (item.extension != null) ? item.extension.toLocaleLowerCase() : null;
        if(item.isDirectory)
        {               
            item.getDirectoryListingAsync();
            item.addEventListener( FileListEvent.DIRECTORY_LISTING, handleDirectoryListing );
        } 
        else if(!item.isSymbolicLink && itemExtn != null)
        {       
            if(itemExtn == "txt")
                videoListsArr.addItem(txt); 
        }
    }   
}

此功能正常但正在执行应用程序挂起并变得无响应。请告诉我如何解决这个问题,它显示txt文件列表而不会使应用程序无响应?

2 个答案:

答案 0 :(得分:0)

从我所看到的,你得到一个目录,查看那里的所有文件,如果其中一个是目录,你会递归查看所有文件,这可能会变得非常沉重,具体取决于在开始文件夹上。删除第一个如果检查并告诉我它是否仍然没有响应

答案 1 :(得分:0)

我使用计时器来分解处理。我的计时器子类Timer添加文件:Array和目录:Array。

处理顶级目录的初始处理程序(在我的例子中, loadDirectoryHandler )加载了timer.files及其无法立即处理的所有文件以及所有子目录,< / p>

在每个循环中通过TIMER处理程序,它会分割出一大块文件Array(例如200个文件),处理它们,然后启动计时器(如果有剩余的话),以便在下一个TIMER事件中处理它们。 / p>

对于每个目录,它采用File对象和

  

file.addEventListener(FileListEvent.DIRECTORY_LISTING,loadDirectoryHandler);   file.getDirectoryListingAsync();

干杯