2015-02-10 1 views
0

Я пытаюсь получить копию в буфер обмена в моем файле .ascx. Поскольку это ASP.NET, нет основной функции для включения [STAThread].Настройка потока для STA, когда в ASP.NET

Я получаю сообщение об ошибке: «Текущий поток должен быть установлен в режим однопоточной квартиры (STA) до того, как вызовы OLE могут быть выполнены. Убедитесь, что на главной функции есть STAThreadAttribute, отмеченные на нем."

В моем файле ascx.cs меня using System.Windows.Forms;, а затем одна строка кода Clipboard.SetText("Hello, clipboard");

Я пытался найти решение, но большинство решений предположим, что есть главный, или сказать, чтобы удалить библиотеки DLL. Эти решения не подходят для моей ситуации.

+1

Я не уверен на 100%, но все же разумно уверен, что вы не можете изменить рабочий поток ASP.NET для STA. Во всяком случае, режим квартиры не может быть изменен после того, как поток запущен. Но вы всегда можете начать новый STA 'Thread'; и установите его режим квартиры в STA перед тем, как вы '.Start()' it; и выполните ваш OLE-код в этом потоке. – stakx

+0

Как мне это сделать? до того, как я использую 'Clipboard.SetText', я вызываю STAThreadAttribute? Где я могу поставить .Start() в этом случае? – emmajean

+0

stakx - это то, как я подошел бы к этой проблеме STA с мыслью, что я буду создавать новый поток. Я не уверен, как вы контролируете первый поток CoCreate в процессе IIS, чтобы вы могли получить вас в конце. ** ОДНАКО ** Я не могу представить ЛЮБОЙ сценарий, где я буду копировать между потоками в многопоточном сервисном приложении, таком как IIS, с помощью Clipboard. У вас будет несколько потоков чтения и записи неверных данных. Есть много других способов сделать IPC Interprocess Communication и Same Process Communication, такие как объекты кэша и уникальные указатели на базы данных сеансов. –

ответ

2

Вы следуете неправильному подходу. Вы думаете об этом с точки зрения сервера, но вы не можете получить доступ к буферу пользователя с сервера. Однако вы можете сделать это с помощью JavaScript, запущенного на клиенте. Но это другой вопрос, и это already been answered.