0

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

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

2 回答 2

1

来自MSDN

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

只需将您的代码更改为:

[STAThreadAttribute]
static void Main( string[] args )
于 2013-09-26T11:36:56.900 回答
0

唯一适用于Clipboard单线程单元线程。

因此,答案是在 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;
}
于 2013-09-26T11:39:05.890 回答