为什么以下代码有时会导致内容为“CLIPBRD_E_CANT_OPEN”的异常:

Clipboard.SetText(str);

这通常发生在应用程序中第一次使用剪贴板时,而不是之后。

最佳答案

实际上,我认为这是 fault of the Win32 API

要在剪贴板中设置数据,您必须先设置 open it。一次只有一个进程可以打开剪贴板。因此,当您检查时,如果另一个进程因任何原因打开了剪贴板,您尝试打开它的尝试将失败。

碰巧的是,终端服务会跟踪剪贴板,而在旧版本的 Windows(Vista 之前)上,您必须打开剪贴板才能查看里面的内容……这最终会阻止您。唯一的解决方案是等到终端服务关闭剪贴板再试一次。

重要的是要意识到这并非特定于终端服务:它可能发生在任何事情上。在 Win32 中使用剪贴板是一个巨大的竞争条件。但是,由于按照设计,您只应该在剪贴板中处理用户输入,因此通常不会出现问题。

关于.net - 从 .NET 设置剪贴板时出现 CLIBRD_E_CANT_OPEN 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/68666/

10-13 07:48
查看更多