BExplorer.Shell.ShellView._UnvalidateTimer_Tick C# (CSharp) Method

_UnvalidateTimer_Tick() private method

private _UnvalidateTimer_Tick ( Object sender, EventArgs e ) : void
sender Object
e EventArgs
return void
    private void _UnvalidateTimer_Tick(Object sender, EventArgs e) {
      this._UnvalidateTimer.Stop();
      if (this.CurrentFolder == null) return;
      try {
        while (_ItemsQueue.Count() > 0) {
          var obj = _ItemsQueue.Dequeue();
          if (obj.Item1 == ItemUpdateType.RecycleBin) {
            this.RaiseRecycleBinUpdated();
          }
          if (obj.Item1 == ItemUpdateType.Deleted) {
            //var worker = new Thread(() => {
            //var itemForDelete = this.Items.ToArray().SingleOrDefault(s =>
            //		s.Equals(obj.Item2) || (
            //			obj.Item2.Extension.Equals(".library-ms") &&
            //			s.ParsingName.Equals(Path.Combine(KnownFolders.Libraries.ParsingName,
            //				Path.GetFileName(obj.Item2.ParsingName)))
            //		)
            //);

            //if (itemForDelete != null) {
            Items.Remove(obj.Item2);
            this._AddedItems.Remove(obj.Item2.PIDL);
            //TODO: Make this to work in threaded environment
            //itemForDelete.Dispose();
            //}

            obj.Item2.Dispose();
            //this.Invoke((Action)(this.ResortListViewItems));
            //});
            //worker.SetApartmentState(ApartmentState.STA);
            //worker.Start();
          } else if (obj.Item1 == ItemUpdateType.Created) {
            if (obj.Item2.IsInCurrentFolder(this.CurrentFolder) && !this.Items.Contains(obj.Item2, new ShellItemEqualityComparer())) {
              obj.Item2.ItemIndex = this.Items.Count;
              this.Items.Add(obj.Item2);
              this._AddedItems.Add(obj.Item2.PIDL);
            }
          } else if (obj.Item1 != ItemUpdateType.RecycleBin) {
            var existingItem = this.Items.FirstOrDefault(s => s.Equals(obj.Item2));
            if (existingItem == null) {
              if (obj.Item2.ParsingName.StartsWith(this.CurrentFolder.ParsingName)) {
                if (!this.Items.Contains(obj.Item2, new ShellItemEqualityComparer()) &&
                        !String.IsNullOrEmpty(obj.Item2.ParsingName)) {
                  obj.Item2.ItemIndex = this.Items.Count;
                  this.Items.Add(obj.Item2);
                  this._AddedItems.Add(obj.Item2.PIDL);
                }
              } else {
                var affectedItem = this.Items.FirstOrDefault(s => s.Equals(obj.Item2.Parent));
                if (affectedItem != null) {
                  var index = affectedItem.ItemIndex;
                  this.RefreshItem(index, true);
                }
              }
            } else {
              if (this.IconSize == 16)
                this.SmallImageList.EnqueueOverlay(existingItem.ItemIndex);
              else
                this.LargeImageList.EnqueueOverlay(existingItem.ItemIndex);
              this.RefreshItem(existingItem.ItemIndex, true);
            }
            //this.ResortListViewItems();
          } else {
            continue;
          }
        }

        foreach (var path in this._TemporaryFiles.ToArray()) {
          var item = this.Items.ToArray().SingleOrDefault(s => s.ParsingName.ToLower().Equals(path.ToLower()));
          if (item?.IsFolder == false && !File.Exists(path))
            this.Items.Remove(item);
        }

        ////if (this.Items.Count != this.CurrentFolder.Count()) {
        //var maintenanceThread = new Thread(() => {
        //	var deletedItems = this.Items.ToArray().Where(p => !this.CurrentFolder.Any(p2 => p2.Equals(p)));
        //	foreach (var deletedItem in deletedItems) {
        //		Items.Remove(deletedItem);
        //		//this._AddedItems.Remove(deletedItem.PIDL);
        //		//deletedItem.Dispose();
        //	}
        //	this.Invoke((Action) (() => {
        //		this.ResortListViewItems();
        //	}));
        //});
        //maintenanceThread.Start();


        //}
        this.ResortListViewItems();

        this.ItemUpdated?.Invoke(this, new ItemUpdatedEventArgs(ItemUpdateType.Created, null, null, -1));
      } catch (Exception) {
      }

      Shell32.SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
    }
ShellView