Exemplo n.º 1
0
        public USBControl()
        {
            InitializeComponent();
            ThisPage = this;
            InitializeTreeView();
            Nav.Navigate(typeof(USBFilePresenter), Nav, new DrillInNavigationTransitionInfo());

            FolderTracker          = new FileSystemTracker(FolderTree.RootNodes.FirstOrDefault());
            FolderTracker.Created += FolderTracker_Created;
            FolderTracker.Deleted += FolderTracker_Deleted;
            FolderTracker.Renamed += FolderTracker_Renamed;

            Application.Current.Suspending += Current_Suspending;
            Loaded += USBControl_Loaded;
        }
Exemplo n.º 2
0
        private void Current_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
        {
            if (FileTracker != null)
            {
                FileTracker.Created -= FileTracker_Created;
                FileTracker.Deleted -= FileTracker_Deleted;
                FileTracker.Renamed -= FileTracker_Renamed;
                FileTracker.Dispose();
                FileTracker = null;
            }

            if (FolderTracker != null)
            {
                FolderTracker.Created -= FolderTracker_Created;
                FolderTracker.Deleted -= FolderTracker_Deleted;
                FolderTracker.Renamed -= FolderTracker_Renamed;
                FolderTracker.Dispose();
                FolderTracker = null;
            }
        }
Exemplo n.º 3
0
 public FolderService()
 {
     this.Files = new ConcurrentDictionary<string, FileData>(StringComparer.InvariantCultureIgnoreCase);
     this.Tree = new SortedObservableCollection<FileData>(FileData.Comparer);
     this._tracker = new FileSystemTracker(this.Tree, this._files);
 }
Exemplo n.º 4
0
 public FolderService()
 {
     this.Files    = new ConcurrentDictionary <string, FileData>(StringComparer.InvariantCultureIgnoreCase);
     this.Tree     = new SortedObservableCollection <FileData>(FileData.Comparer);
     this._tracker = new FileSystemTracker(this.Tree, this._files);
 }
Exemplo n.º 5
0
        private async void FileTree_ItemInvoked(TreeView sender, TreeViewItemInvokedEventArgs args)
        {
            /*
             * 同一文件夹内可能存在大量文件
             * 因此切换不同文件夹时极有可能遍历文件夹仍未完成
             * 此处激活取消指令,等待当前遍历结束,再开始下一次文件遍历
             * 确保不会出现异常
             */
            //防止多次点击同一文件夹导致的多重查找
            if ((args.InvokedItem as TreeViewNode).Content is StorageFolder folder)
            {
                if (folder.FolderRelativeId == CurrentFolder?.FolderRelativeId)
                {
                    IsAdding = false;
                    return;
                }

                if (IsAdding)
                {
                    await Task.Run(() =>
                    {
                        lock (SyncRootProvider.SyncRoot)
                        {
                            CancelToken.Cancel();
                            Locker.WaitOne();
                        }
                    });
                }
                IsAdding = true;

                CurrentFolder = folder;
                CurrentNode   = args.InvokedItem as TreeViewNode;
                USBFilePresenter.ThisPage.DisplayNode = CurrentNode;

                //当处于USB其他附加功能的页面时,若点击文件目录则自动执行返回导航
                if (Nav.CurrentSourcePageType.Name != "USBFilePresenter")
                {
                    Nav.GoBack();
                }

                USBFilePresenter.ThisPage.FileCollection.Clear();

                QueryOptions Options = new QueryOptions(CommonFileQuery.DefaultQuery, null)
                {
                    FolderDepth   = FolderDepth.Shallow,
                    IndexerOption = IndexerOption.UseIndexerWhenAvailable
                };

                Options.SetThumbnailPrefetch(ThumbnailMode.ListView, 60, ThumbnailOptions.ResizeThumbnail);

                var FileQuery = folder.CreateFileQueryWithOptions(Options);

                var FileList = await FileQuery.GetFilesAsync();

                USBFilePresenter.ThisPage.HasFile.Visibility = FileList.Count == 0 ? Visibility.Visible : Visibility.Collapsed;

                if (FileTracker != null)
                {
                    FileTracker.Created -= FileTracker_Created;
                    FileTracker.Deleted -= FileTracker_Deleted;
                    FileTracker.Renamed -= FileTracker_Renamed;
                    FileTracker.Dispose();
                    FileTracker = null;
                }

                FileTracker          = new FileSystemTracker(FileQuery);
                FileTracker.Created += FileTracker_Created;
                FileTracker.Deleted += FileTracker_Deleted;
                FileTracker.Renamed += FileTracker_Renamed;

                foreach (var file in FileList)
                {
                    if (CancelToken.IsCancellationRequested)
                    {
                        goto FLAG;
                    }
                    USBFilePresenter.ThisPage.FileCollection.Add(new RemovableDeviceFile(file));
                }
            }

FLAG:
            if (CancelToken.IsCancellationRequested)
            {
                CancelToken.Dispose();
                CancelToken = new CancellationTokenSource();
                Locker.Set();
            }
            else
            {
                IsAdding = false;
            }
        }