使用IncludeHeader ClipboardCopyMode的WPF Datagrid COMException

Mah*_*der 9 .net wpf clipboard wpfdatagrid

在我的WPF应用程序中,我使用的是Datagrid控件; 在控件定义中,我将ClipboardCopyMode属性定义为'IncludeHeader'.

<DataGrid Name="datagrid"  ClipboardCopyMode="IncludeHeader">
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

有时,当我尝试从网格中复制任何数据时,我遇到HRESULT剪贴板崩溃错误 -

System.Runtime.InteropServices.COMException (0x800401D0): 
OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))
Run Code Online (Sandbox Code Playgroud)

任何解决它的建议.我查看了其他帖子,主要是关于如何在明确使用Clipboard相关方法时如何处理这种情况,但没有相关的方法Datagrid.

akj*_*shi 4

从Andrew Smith在http://blogs.infragistics.com/forums/t/35379.aspx找到了这个-

从技术上讲,只有1个进程可以打开剪贴板,因此如果另一个进程打开它,后续请求将失败,直到第一个释放剪贴板.这是在WinForms Clipboard类中处理的,它会在每次尝试之间延迟重试该集合,但WPF剪贴板类不执行此操作,因此如果在第一次显示时失败则发生异常.即便如此,如果它仍然失败,我们应该捕获异常并引发剪贴板操作错误.

在这个意大利博客中提到了同样的事情,并提到了一些解决方法 -

WPF DataGrid剪贴板BUG(?)和工作

谷歌翻译

以下MSDN论坛帖子表明这可能是机器特定的问题,你能在其他机器上重现吗? -

从DataGrid复制到剪贴板时出现CLIPBRD_E_CANT_OPEN异常

更新:

博客链接似乎已关闭,但可以通过此链接访问缓存版本 -

WPF DataGrid剪贴板BUG(?)和工作(缓存翻译)