System.Threading.ThreadstateException - PullRequest
       6

System.Threading.ThreadstateException

2 голосов
/ 02 апреля 2010

Я разрабатываю дополнение для офисного приложения PowerPoint. Я пытаюсь отобразить описание объекта (настраиваемый объект), который в данный момент находится на слайде PowerPoint, в режиме конструктора (режим конструирования PowerPoint). Когда я нажимаю на свое дополнение, описание связанного объекта отображается в окне с вкладками в качестве первой вкладки.

На вкладке есть кнопка, и когда я нажимаю на нее, мне нужно описание, чтобы скопировать его в буфер обмена Windows. Я попробовал это с помощью clipboardclass, он выдает следующее исключение, System.Threading.ThreadstateException {"Текущий поток должен быть переведен в однопотоковый режим (STA) до того, как будут выполнены вызовы OLE. Убедитесь, что в вашей главной функции помечен атрибут STAThreadAttribute."}

Код для буфера обмена: Clipboard.Clear () Clipboard.SetText (lblObjectID.Text)

Я искал в сети решение и получил пару ответов вроде: 1. Поместите [STAThread] в основную функцию 2. Thread.CurrentThread.SetApartmentState (ApartmentState.STA) Непосредственно перед вашим вызовом SetDataObject.

Но я не уверен, куда поставить первый, а второй вариант не сработал. Кто-нибудь может мне помочь. Спасибо.

1 Ответ

4 голосов
/ 02 апреля 2010

WinForms по умолчанию являются STA. Вы создаете другой поток или используете BackgroundWorker? Запустите этот код, чтобы определить, в каком режиме вы находитесь:

MessageBox.Show(System.Threading.Thread.CurrentThread.GetApartmentState().ToString())

Edit:

Но, возможно, вы также можете попробовать эту команду перед вызовом функций буфера обмена:

Application.OleRequired()
...