C# 无法在单元测试中设置WinForms剪贴板

C# 无法在单元测试中设置WinForms剪贴板,c#,winforms,nunit,clipboard,sta,C#,Winforms,Nunit,Clipboard,Sta,我想用NUnit测试的文本填充Forms.Clipboard 我遇到的第一个问题是剪贴板必须在STA模式下使用。我找到了(NUnit 2.5.x+)来设置方法的RequiresSTA属性 接下来,当调用Clipboard.SetText()时,我得到一个ExternalException。我发现可以使用Clipboard.SetDataObject(object,bool,int,int),在这里可以指定retryTimes来多次尝试设置剪贴板。这种骇人的解决方案有时有效,但显然不够好(增加re

我想用NUnit测试的文本填充Forms.Clipboard

我遇到的第一个问题是剪贴板必须在STA模式下使用。我找到了(NUnit 2.5.x+)来设置方法的RequiresSTA属性

接下来,当调用Clipboard.SetText()时,我得到一个ExternalException。我发现可以使用Clipboard.SetDataObject(object,bool,int,int),在这里可以指定retryTimes来多次尝试设置剪贴板。这种骇人的解决方案有时有效,但显然不够好(增加retryTimes参数当然也会增加成功的机会)

其他人(例如)已经成功地做到了这一点,所以这可能与我的环境有关:我在Windows7下运行VS2010,64位目标是.NET3.5和x86。NUnit版本是2.5.9


我卡住了。任何帮助都将不胜感激。

回答我自己的问题:


正如汉斯·帕桑(Hans Passant)在评论中指出的那样,问题在于另一个过程正在干扰。谷歌Chrome似乎是一个邪恶的过程。

听起来不像是一个单元测试。在单元测试中,您是否考虑过从windows剪贴板中抽象出来并使用您自己的“IClipboard”界面?这是一个环境问题,另一个过程正在弄乱剪贴板。使用taskmgr.exe并开始终止进程,直到找到麻烦制造者。希望那不是你自己的。@j探员:非常同意。不过,在本例中,剪贴板是我测试的一部分:(@Hans Passant:想法不错。在杀死一些应用程序后,它似乎可以工作。我会再测试一次报告。