2013-09-26 3 views
0

Я пишу небольшое приложение, которое должно отображать количество символов в текущей строке из буфера обмена. Так, например, кто-то выделяет строку текста и хитов, а затем запускает мое приложение. Я хочу, чтобы он отображал количество символов в строке. Должно быть простым, но я продолжаю получать Zero. Есть связанные темы, но никто не отвечает на мой вопрос. Вот то, что я до сих пор (Его консольного приложения кстати.):Установите значение строки из содержимого буфера обмена C#

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

ответ

1

От MSDN:

Класс Clipboard можно использовать только в потоках, установленных на одной нити квартиры (STA) Режим. Чтобы использовать этот класс, убедитесь, что ваш Основной метод отмечен атрибутом STAThreadAttribute.

Просто измените свой код:

[STAThreadAttribute] 
static void Main(string[] args) 
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; 
} 
+0

Спасибо Мэтью, @japc ответ выше работает. –

Смежные вопросы