当前内容中不存在剪贴板

时间:2016-08-02 12:05:30

标签: c#

我想在控制台应用程序中使用Clipboard.GetText()。但是我收到错误消息“当前内容中不存在名称'剪贴板'”。我搜索了关于它的其他问题,并添加了[STAThread],但问题没有得到解决。

namespace Get_Text_Console_App
{

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            if (Clipboard.ContainsText())
            {
                string text = Clipboard.GetText();

            }
        }
    }
}

5 个答案:

答案 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();
   }
}