Текущий поток должен быть задан как поток однопоточного контейнера sta
Перейти к содержимому

Текущий поток должен быть задан как поток однопоточного контейнера sta

  • автор:

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны

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

OpenFileDialog и потоки: Текущий поток должен быть задан как поток однопоточного контейнера (STA)
Со стартового окна запускаю формы вот так: new Thread(() =&gt; < .

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

Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA
Значит модуль в нем классы.Я создаю свое гуи.Так вот при вызове процедуры котрая копирует текст(в.

Лучший ответСообщение было отмечено Tlya как решение

Решение

Вызывающим потоком должен быть STA
Работаю с API одного сайта. Вывожу при помощи этого имена пользователей и хочу сделать.

Как усыпить текущий поток, не усыпляя все остальные?
Привет. У меня есть устройство, с которым я общаюсь через COM-порт. class RS232_Board : public.

Тестирование WPF UserControl: Вызывающим потоком должен быть STA
Создал элемент управления и сейчас стоит задача его протестировать. Но после написания тест выдаёт.

Текущий поток должен быть задан как поток однопоточного контейнера

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша функция Main помечена атрибутом STAThreadAttribute.

Что это значит и как исправить? И почему она выскакивает не всегда?

ModaL's user avatar

Судя по докам, это надо для работы с COM

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.6.43612

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Текущий поток должен быть задан как поток однопоточного контейнера sta

Этот форум закрыт. Благодарим вас за ваш вклад. Если вам нужна дополнительная информация о том, где еще можно найти помощь, вы можете посетить страницу ресурсов.

Лучший отвечающий

Вопрос

Доброе время суток, у меня вопрос:

Для вызова окна в windows приложении я использую следующий код:

if (TxtfolderBrowserDialog.ShowDialog() == DialogResult.OK)
textBoxInput.Text = TxtfolderBrowserDialog.SelectedPath; и все работает прекрасно

А в веб-приложении мне выдает следующую ошибку: Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша функция Main помечена атрибутом STAThreadAttribute. Данное исключение создается, только если к процессу подключен отладчик.

Подскажите пожалуйста в чем проблема? или может существует иной вариант для вызова окна "обзор папок"?

Ответы

Повторюсь: стандарт HTML ограничивает браузер в доступе к файловой системе. Все, что доступно приложению, — это дать выбрать пользователю один файл, после чего загрузить его на сервер (но не изменять, переименовывать или удалять с диска). Подумайте сами: это ж какой был бы простор для вирусов: Вы зашли на какой-то сайт, а он удалил у Вас на компьютере все содержимое диска.

При помощи расширений браузера можно обойти это ограничение, например, в Silverlight 4 есть доступ к папке "Мои документы" (но не к остальной части файловой системы).

Так что варианты:

  • использовать Silverlight (и ограничиться папкой "Мои документы");
  • может быть, в Adobe AIR есть какие-то возможности доступа к локальной файловой системе;
  • давать пользователю выбрать файлы, а не папки;
  • сделать настольное приложение и сервис на стороне сервера (если приложение должно быть кроссплатформенным, можно использовать Mono — так приложение сможет работать на Windows, Linux и MacOS, но для остальных платформ придется разрабатывать отдельные настольные приложения).
  • Помечено в качестве ответа Zvezdochka 31 января 2011 г. 5:40

Все ответы

Обзор папок в ASP.NET WebForms? При помощи элемента FolderBrowserDialog Windows Forms?

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

Если нужно отобразить дерево каталогов, построенное по файловой системе сервера, напишите об этом в данной теме — я пришлю пример.

Скорее всего Zvezdochka хочет отобразить дерево каталогов клиентской стороны. Если это так, то Zvezdochka, для каких целей вы хотите это сделать, может быть найдется другое решение?

Да вы правильно поняли, необходимо отобразить дерево каталогов клиетской стороны.

Это необходимо по следующей причине:

Данное веб-приложение работает на сервере, оно будет обрабатывать xml-файлы, находящиеся на компьютере у пользователя, находящиеся в определенной папке. Для этого и необходимо отобразить дерево каталогов, чтобы пользователь выбрал папку в данном меню. А вот как разобраться не могу, если знаете решение подскажите пожалуйста.

Повторюсь: стандарт HTML ограничивает браузер в доступе к файловой системе. Все, что доступно приложению, — это дать выбрать пользователю один файл, после чего загрузить его на сервер (но не изменять, переименовывать или удалять с диска). Подумайте сами: это ж какой был бы простор для вирусов: Вы зашли на какой-то сайт, а он удалил у Вас на компьютере все содержимое диска.

При помощи расширений браузера можно обойти это ограничение, например, в Silverlight 4 есть доступ к папке "Мои документы" (но не к остальной части файловой системы).

Так что варианты:

  • использовать Silverlight (и ограничиться папкой "Мои документы");
  • может быть, в Adobe AIR есть какие-то возможности доступа к локальной файловой системе;
  • давать пользователю выбрать файлы, а не папки;
  • сделать настольное приложение и сервис на стороне сервера (если приложение должно быть кроссплатформенным, можно использовать Mono — так приложение сможет работать на Windows, Linux и MacOS, но для остальных платформ придется разрабатывать отдельные настольные приложения).
  • Помечено в качестве ответа Zvezdochka 31 января 2011 г. 5:40

У меня вопрос по поводу 3 варианта — Предоставить возможность выбирать файлы.

Элемент <input type="file" name="FileName" runat="server" /> позволяет выбирать только 1 файл.

Где бы не искала не могу найти выбор нескольких файлов в окне. Требуется выбирать только один файл. Это не вариант, если учесть что файлов может быть очень много.

Находила готовые web-приложения с загрузкой нескольких файлов, а все таки требуется выбирать также по одному. Плюс в том, что потом можно загрузить их кучей на сервер.

Подскажите, как решить данную проблему?

До недавнего времени проблема решалась только использованием в веб-приложении Flash или Silverlight.

Теперь можно воспользоваться элементом из альфа-версии стандарта HTML 5:

Подробнее — в черновике спецификации . Вот здесь можно посмотреть пример. Только учтите, что этот способ поддерживается не во всех браузерах (в IE 8, например, не работает). Если нужна поддержка во всех современных браузерах, то тогда только Silverlight или Flash.

Да вы правильно поняли, необходимо отобразить дерево каталогов клиетской стороны.

Это необходимо по следующей причине:

Данное веб-приложение работает на сервере, оно будет обрабатывать xml-файлы, находящиеся на компьютере у пользователя, находящиеся в определенной папке. Для этого и необходимо отобразить дерево каталогов, чтобы пользователь выбрал папку в данном меню. А вот как разобраться не могу, если знаете решение подскажите пожалуйста.

А каким образом сервер будет обрабатывать файлы, которых у него нет. Допустим Вы найдете решение данного вопроса, как Вы вообще планируете это реализовать. Поверьте, если Вы сможете для себя ответить на последний вопрос, тогда я только могу Вам пожелать удачи, хотя я лично НЕ ПРЕДСТАВЛЯЮ КАК ЭТО РЕАЛИЗОВАТЬ.

Task.Run из потока пользовательского интерфейса выдает ошибку STA

В то время как я рефакторинг старого кода С# для генерации документов с помощью библиотеки Office.Interop , я нашел это и из-за этого использовал контекст пользовательского интерфейса, когда функция вызывалась из него, он блокировал его

Решено изменить его так, чтобы уменьшить от блокировки UI

И он выбрасывал такую ​​ошибку

Текущий поток должен быть установлен в режим однопоточной квартиры (STA) до того, как вызовы OLE могут быть сделаны

Почему это происходит и что возможно обходное решение?

2 ответа

Компоненты COM, доступные через Interop, требуют, чтобы вызывающий поток был потоком STA, но в вашем случае это не STA. Используя STA, к компоненту можно получить доступ через несколько потоков. Вы можете узнать больше о том, почему требуется STA в Понимание и использование моделей потоковой передачи COM Вы можете создать метод расширения в классе Task, как предлагается в этом , чтобы вызвать COM-компонент через Interop, используя задачу.

Вы также можете использовать Thread вместо задачи, вы должны установить ApartmentState на STA, как thread.SetApartmentState(ApartmentState.STA)

Потому что в этом случае Task предположительно запускает новый поток, который не является потоком STA. Ваши вызовы updateDoc и newDoc — это те, которые вызывают слой Interop, который не любит потоки MTA.

Вы можете реорганизовать это, чтобы использовать Thread вместо Task и самостоятельно установить квартиру в STA. Я был бы осторожен, потому что я не уверен, что Interop любит многопоточность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *