BackgrowndWorker и Form
От: alcotras  
Дата: 12.03.07 10:36
Оценка:
СОздаю форму в функции, привязвной к DoWork этого объекта:


        void oServerContainer_DoWork(object sender, DoWorkEventArgs e)
        {
            FormServer1 oFrm = new FormServer1();
            oFrm.Show();
            Application.Run();
        }


Получаю исключение в это методе:



Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it


Что он от меня хочет? И как быть?
Re: BackgrowndWorker и Form
От: Lloyd Россия  
Дата: 12.03.07 10:42
Оценка:
Здравствуйте, alcotras, Вы писали:

A>Что он от меня хочет? И как быть?


Повесь на метод Main атрибут STAThread.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: BackgrowndWorker и Form
От: Аноним  
Дата: 12.03.07 11:05
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, alcotras, Вы писали:


A>>Что он от меня хочет? И как быть?


L>Повесь на метод Main атрибут STAThread.


Это не Main метод. Это метод, вызываемый из BackgroundWorker
Re[3]: BackgrowndWorker и Form
От: Lloyd Россия  
Дата: 12.03.07 11:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

A>>>Что он от меня хочет? И как быть?


L>>Повесь на метод Main атрибут STAThread.


А>Это не Main метод. Это метод, вызываемый из BackgroundWorker


Повесь на метод Main атрибут STAThread.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: BackgrowndWorker и Form
От: _FRED_ Черногория
Дата: 12.03.07 11:24
Оценка:
Здравствуйте, alcotras, Вы писали:

A>Что он от меня хочет?


Потоку, в котором вызывается Application.Run(); надо сказать SetApartmentState(ApartmentState.STA).

A>И как быть?


Поток, в котором вызывается "oServerContainer_DoWork" создан не тобою, поэтому менять appartment state для него ты не вправе. Поэто в обработчике создавай новый поток (Thread), говори ему SetApartmentState(ApartmentState.STA) и запускай в нём свою форму и Application.Run();. Кстати, лучше сделать это так:
  using(FormServer1 oFrm = new FormServer1()) {
A>  Application.Run(oFrm);
  }//using
A>
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.