它没有崩溃,我在这里提到的所有异常只能在Visual Studio的Output窗口中看到。这是Dragging的实现:
WPF:
<StackPanel Orientation="Vertical"
MouseDown="DragShortcut"
x:Name="Shortcut">
<Image Source="{Binding Icon}"/>
<Label Content="{Binding ShortcutLabel}"/>
</StackPanel>
cs code:
private void DragShortcut(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton != MouseButtonState.Pressed)
return;
var dataObject = new DataObject(DataFormats.FileDrop, new[] { Options.DragDropOptions.ShortcutPath });
DragDrop.DoDragDrop(Shortcut, dataObject, DragDropEffects.Copy);
}
所有内容似乎都按预期工作,但每次我在桌面或资源管理器窗口上拖动时,我都会在Visual Studio的“输出”窗口中收到以下消息:
...
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
A first chance exception of type 'System.NotImplementedException' occurred in PresentationCore.dll
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
...
当Visual Studio设置为停止此类异常时,我可以看到以下异常:
System.Runtime.InteropServices.COMException was unhandled
Message: An exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll and wasn't handled before a managed/native boundary
Additional information: Invalid FORMATETC-Structure (Exception HRESULT: 0x80040064 (DV_E_FORMATETC))
和
System.NotImplementedException was unhandled
Message: An exception of type 'System.NotImplementedException' occurred in PresentationCore.dll and wasn't handled before a managed/native boundary
Additional information: The method or operation is not implemented.
它不会导致崩溃或任何事情,作为开发人员,我在背景中发生这样的事情会让我感到不舒服。有没有人知道它会是什么?
编辑:
This问题看起来很像我的问题,但似乎有另一个原因和解决方案。
答案 0 :(得分:6)
这是完全正常的。无论您拖动的另一个进程的窗口是什么,都会使该进程查看您拖动的对象,以查看它是否支持特定格式,还是可以将对象转换为其他格式。在引擎盖下完成了COM calls。如果答案是&#34;是&#34;然后你会看到光标发生变化,表明你可以放弃。
WPF中的IDataObject接口实现说&#34; no&#34;通过抛出异常。在.NET程序中生成COM失败代码的常规方法。 CLR将该异常转换为COM错误代码HRESULT,告诉进程它不能正常工作。请注意Exeption类如何具有HResult property,即进程看到的内容。
调试器尽职尽责地显示&#34;第一次机会&#34;如果您要求提供异常通知。右键单击“输出”窗口,&#34;异常消息&#34;选项,默认打开。没有什么事实出错,异常被捕获并优雅地处理。功能,而不是错误。