我们在Winforms应用程序中有一个响应的标准文本框 糊 (正确的方式(即粘贴)在我们的开发环境中(右键菜单和CTRL + V)。
在一个客户站点,粘贴大部分被完全忽略(表现得好像剪贴板中没有任何内容)。我们使用TextBox的单行和多行版本测试了它,我们创建了一个只有几个TextBox的独立应用程序,在这个客户端站点上问题仍然存在。粘贴大部分都不起作用。
在进一步测试中,我们发现只需在测试winforms应用程序中询问剪贴板的内容,它就会返回为空字符串。用记事本仔细检查,我们发现有 无疑 剪贴板中的东西。
这是我们检查的内容:
- 在测试中我们确保 资源 剪贴板是从记事本或实际上在文本框本身,所以我们知道它不是HTML / Word中的怪异东西
- 我们总是可以输入文本框,因此文本框不会允许修改
- 文字数量 我们已经在剪贴板中使用大量和少量文本进行了尝试,没有任何区别
- 右键单击粘贴与CTRL + V:他们既可以工作也可以不工作 - 所以那些关于修复其中一个或另一个的所有帖子对我们没有帮助
- 寻找模式 一世 认为 一旦它失败,一旦它重新启动,直到应用程序重新启动,但我不确定
- 当粘贴问题确实发生时,剪切和复制不受影响并继续工作
- 客户端的机器粘贴功能肯定适用于其他应用程序,记事本,Office等
请记住,完全相同的编译应用程序始终在我们的开发机器上成功粘贴并且确实如此 偶尔 在客户的机器上成功粘贴!这就是它如此神秘的原因。
在所有情况下,我们都通过粘贴到我们的应用程序旁边的记事本来验证剪贴板中有什么东西。
有没有其他人看过这个和/或可以提出解释?
更新/进一步调查
难道它与线程有关吗?我们不会对线程做任何有趣的事情,我们也不必担心使用STAThread属性。但是MSDN页面说:
Clipboard类只能在设置为单线程的线程中使用 公寓(STA)模式。要使用此类,请确保使用Main方法 标有STAThreadAttribute属性。
因此,在没有主线程的Winforms项目中 - 只是一个启动表单,你在哪里放置这个属性?为什么我们不在开发机器上需要它呢?为什么我们永远不需要在我们制作的无数其他Winforms应用程序中使用它?