WPF DragDrop: Window.ShowModal() hangs Windows Explorer

拈花ヽ惹草 提交于 2019-12-13 22:06:47

问题


I have written code to allow dropping a file from Windows Explorer into a WPF application. In my drop event handler I launch a window which displays information about the dropped file. If I create this window using Window.ShowModally() then Windows Explorer will hang/freeze until the window in my app is closed. However, if I create the window using Window.Show() this problem does not occur. Unfortunately, I require this window to be shown modally.

Presumably the Windows Explorer thread is locked because it detects that one of its files is being used. Is there a way to inform Windows Explorer that it does not need to wait for the window in my application to close? I have tried setting the DragDropEventArgs.Handled to true but this does not resolve the problem.

I no longer require the DragDrop once I have extracted the data from it so if there is a way to cancel or end the DragDrop in my Drop event handler then this would be an acceptable solution.


回答1:


You cannot block in any of your drag+drop event handlers, that will hang the D+D plumbing and a dead source window is the expected outcome.

There's a simple workaround, just ask the dispatcher to run your code later, after the event completes. Elegantly done with its BeginInvoke() method. Roughly:

    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..
        }));
    }


来源:https://stackoverflow.com/questions/21184954/wpf-dragdrop-window-showmodal-hangs-windows-explorer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!