Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запустить STA метод из MTA окружения 
:(
    Опции темы
Freak_FB
Дата 18.10.2010, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 1
Всего: 4



Подскажите сабж.
Есть приложение, которое крутится в MTA окружении (конкретнее - сайт на ASP.NET MVC).
К нему я хочу прикрутить самодельный движок картинок, который будет мне генерировать картинки по запросу. В качестве движка для отрисовки выбрал WPF.
Как известно - WPF не может работать в MTA. Поток с генератором я запускаю с явным указанием, чтобы работал в STA, и инициализация движка проходит нормально. Но потом я должен получить картинку по заданным параметрам, вызываю метод, который находится в рабочем объекте потока, и он перенимает от вызывающего потока окружение MTA. И возникает ошибка времени выполнения.
Как можно вызвать метод вторичного потока так, чтобы apartment был STA?


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
sCreator
Дата 18.10.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

Репутация: 1
Всего: 5



Это не подойдет?
Цитата

При применении на странице ASP.NET компонентов COM, использующих однопоточное подразделение (STA), таких как компоненты, разработанные с помощью Visual Basic, необходимо включить на страницу атрибут совместимости AspCompat=true в теге <%@ Page >, как показано в следующем примере:
Копировать

Код

<%@Page AspCompat=true Language = VB%>


Атрибут AspCompat приводит к выполнению страницы в режиме STA. Если на странице указана ссылка на компонент STA и пропущен тег совместимости, то во время выполнения возникает исключение. Если компонент STA преобразуется в сборку с помощью файла TlbImp.exe, во время выполнения не будет обнаружено, что в компоненте используется модель STA и исключение не будет вызвано, но производительность приложения может значительно снизиться.

http://msdn.microsoft.com/ru-ru/library/zw...28VS.90%29.aspx
PM   Вверх
Freak_FB
Дата 19.10.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 1
Всего: 4



Этот метод мне не подходит, у меня ASP.NET MVC.

Но я решил уже по другому (часть кода вырезана):
Код

public class MapController : Controller
    {
        private byte[] imageBuffer;

        //
        // GET: /Map/

        public ActionResult Index()
        {

            double l, r, t, b;

            l = double.Parse(Request["l"]);
            r = double.Parse(Request["r"]);
            t = double.Parse(Request["t"]);
            b = double.Parse(Request["b"]);

            Thread thr = new Thread(new ThreadStart(delegate() { imageBuffer = mapService.GetMapFragmentStream(new CoordBounds { Bottom = b, Top = t, Left = l, Right = r }); }));
            thr.SetApartmentState(ApartmentState.STA);
            thr.Start();
            thr.Join();

            return new FileStreamResult(new MemoryStream(imageBuffer), "image/png");
        }
    }

В итоге, значение приходится возвращать через внешнюю переменную, что мне очень не нравится.
Может, кто-то подскажет, как это можно сделать иначе?


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.