从剪贴板内容C#设置字符串值

时间:2013-09-26 11:30:56

标签: c# visual-studio-2010 clipboard

我正在编写一个小应用程序,它应该显示剪贴板中当前字符串中的字符数。例如,有人突出显示一行文本并点击复制,然后运行我的应用程序。我希望它显示字符串中的字符数。应该很简单,但我一直得到归零。有相关的线程,但没有人回答我的问题。这是我到目前为止(它是一个控制台应用程序顺便说一句):

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BuildandRun
{
    class Program
    {
        static void Main(string[] args)
        {
            string data = Clipboard.GetText();
            Console.WriteLine(data);
            int dataLength = data.Length;
            Console.WriteLine(dataLength + " Characters.");

            Console.ReadLine();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

来自MSDN

  

Clipboard类只能在设置为单线程的线程中使用   公寓(STA)模式。要使用此类,请确保使用Main方法   标有STAThreadAttribute属性。

只需将您的代码更改为:

[STAThreadAttribute]
static void Main( string[] args )

答案 1 :(得分:0)

Clipboard仅适用于Single Threaded Apartment主题。

因此答案是将以下内容添加到Main():

[STAThread]
static void Main(string[] args)
{
    ...

或者像这样解决方法:

public string GetClipboardText()
{
    string result = "";

    Thread thread = new Thread(() => result = Clipboard.GetText());
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();

    return result;
}