public void StartDragDrop(VirtualFileDataObject data)
 {
     if (Aggregator != null)
     {
         Thread t = new Thread(() => Aggregator.GetEvent <StartProgress>().Publish());
         t.IsBackground = true;
         t.Start();
     }
 }
      public void DoDragDrop(List <IEntry> entries)
      {
          VirtualFileDataObject virtualFileDataObject = new VirtualFileDataObject(StartDragDrop, EndDragDrop);
          var files = new List <VirtualFileDataObject.FileDescriptor>();

          string currentDir = Utils.CurrentWindow.CurrentDir;

          foreach (var entry in entries)
          {
              if (entry is FileEntry file)
              {
                  PopulateFile(files, file, currentDir);
              }
              else if (entry is FolderEntry folder)
              {
                  PopulateFiles(files, folder, currentDir);
              }
          }

          //Show dialog only when there are more than 5 items moved.
          Console.WriteLine("Beginning with {0} files", files.Count);
          virtualFileDataObject.SetData(files);

          if (files.Count > 10)
          {
              Aggregator = new EventAggregator();
              Aggregator.GetEvent <StartProgress>().Subscribe(() =>
                {
                    var pms = new DialogParameters();
                    pms.Add("ProgressAction", new Action <ProgressDialogViewModel>(dialog => {
                        Progress = dialog;
                    }));

                    Utils.ShowDialog("ProgressDialog", pms);
                }, ThreadOption.UIThread);
          }

          try
          {
              VirtualFileDataObject.DoDragDrop(Control, virtualFileDataObject, DragDropEffects.Copy);
          }
          catch (COMException)
          {
              Console.WriteLine("Failed Drag-Drop.");
          }
          Console.WriteLine("Finished Drag-Drop operation setup");
      }
 public void EndDragDrop(VirtualFileDataObject data)
 {
 }