2014-01-17 56 views
0

我已经写代码,允许下降从Windows资源管理器中的文件移到WPF应用程序。在我的drop事件处理程序中,我启动一个窗口,显示有关已删除文件的信息。如果我使用Window.ShowModally()创建此窗口,则Windows资源管理器将挂起/冻结,直到我的应用中的窗口关闭。但是,如果我使用Window.Show()创建窗口,则不会发生此问题。不幸的是,我需要这个窗口以模态显示。WPF的DragDrop:Window.ShowModal()挂起Windows资源管理器

想必Windows资源管理器线程被锁定,因为它检测到正在使用的文件之一。有没有办法通知Windows资源管理器,它不需要等待我的应用程序中的窗口关闭?我试图将DragDropEventArgs.Handled设置为true,但这不能解决问题。

我不再需要的DragDrop一旦我已经解压缩它的数据,因此,如果有取消或结束我的Drop事件处理程序的DragDrop那么这将是一个可以接受的解决方案的方式。

回答

2

您不能在任何你拖+降事件处理程序的阻止,将挂在d + d管道和尸源窗口是预期的结果。

有一个简单的解决方法,只需让调度员在事件完成后运行代码以后的。使用BeginInvoke()方法优雅地完成。大致为:

private void Window_Drop(object sender, DragEventArgs e) { 
     // Do something with dropped object 
     //... 
     this.Dispatcher.BeginInvoke(new Action(() => { 
      var dlg = new DialogWindow(); 
      dlg.Owner = this; 
      var result = dlg.ShowDialog(); 
      // etc.. 
     })); 
    } 
+0

谢谢,它的工作原理!这是一个很好的解锁线程的简单解决方案。我做的唯一改变是取代这个.Dispatcher我使用了Application.Current.Dispatcher – MoonBoots89

相关问题