在过去的几个小时中,我一直在追踪一个相当具体的错误,该错误是由于另一个应用程序打开了剪贴板而发生的。本质上,由于剪贴板是共享资源(根据“为什么我的共享剪贴板不起作用?” http://blogs.msdn.com/rds/archive/2006/11/20/why-does-my-shared-clipboard-not-work-part-2.aspx)并且你尝试执行
Clipboard.SetText(string)
or
Clipboard.Clear().
抛出以下异常:
System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed.
at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
at System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat format)
at System.Windows.Forms.Clipboard.SetText(String text)
我最初的解决方案是短暂暂停后重试,直到我意识到 Clipboard.SetDataObject 有用于次数和延迟长度的字段。 .NET 的默认行为是尝试 10 次,延迟 100 毫秒。
最终用户注意到最后一件事。也就是说,尽管抛出异常,复制到剪贴板操作仍然有效。我无法找到有关原因的任何进一步信息。
我目前对该问题的解决方案只是默默地忽略异常......这真的是最好的方法吗?
另一种解决方法是使用Clipboard.SetDataObject
代替Clipboard.SetText
.
根据这篇 MSDN 文章 http://msdn.microsoft.com/en-us/library/ms158293.aspx这个方法有两个参数 -重试次数 and 重试延迟- 你可以像这样使用:
System.Windows.Forms.Clipboard.SetDataObject(
"some text", // Text to store in clipboard
false, // Do not keep after our application exits
5, // Retry 5 times
200); // 200 ms delay between retries
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)