我想在控制台应用程序中使用Clipboard.GetText()
。但是我收到错误消息“当前内容中不存在名称'剪贴板'”。我搜索了关于它的其他问题,并添加了[STAThread]
,但问题没有得到解决。
namespace Get_Text_Console_App
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if (Clipboard.ContainsText())
{
string text = Clipboard.GetText();
}
}
}
}
答案 0 :(得分:1)
这个项目是WinForms项目吗?来自MSDN:
命名空间:System.Windows.Forms
如果不是这样,那么在不引用System.Windows.Forms.dll
的情况下就不能使用该类。
答案 1 :(得分:1)
您需要添加对PresentationCore.dll
的引用,并将using System.Windows
放在文件的顶部。
答案 2 :(得分:0)
添加引用命名空间:
using System.Windows.Forms;
我之前试过这个。但我认为我必须右键单击解决方案资源管理器 - >添加 - >参考 - >在将代码添加到我的代码之前的System.Windows.Forms。我想知道是否如此,但现在它正在工作:)
......一开始总是很难。每一个小步骤都会慢慢走。
答案 3 :(得分:0)
您需要引用System.Windows.dll
(对于WPF版本)或System.Windows.Forms.dll
(对于winforms版本),并确保使用using
语句导入名称空间。
答案 4 :(得分:0)
就像其他一些答案一样,请确保您通过将表单命名空间包含在您的使用空间中来引用它(因为您没有使用winforms并从控制台应用程序执行此操作):
using System.Windows.Forms;
然后还要确保您的参考文献(如Nick Bull所述)包含PresentationCore.dll
。
然后最后一点,我认为这段代码不会100%工作,你需要一个STA线程,但到目前为止我做的最好的执行是:
static string GetClipText() {
string res = string.Empty;
Thread staThread = new Thread(x => {
try {
res = Clipboard.GetText();
}
catch (Exception ex) {
res = ex.Message;
}});
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();
return res;
}
然后只需在代码中调用新方法:
static void Main(string[] args) {
if (Clipboard.ContainsText()) {
string text = Clipboard.GetClipText();
}
}