Форма в библиотеке
От: Vetal1979  
Дата: 25.08.09 10:37
Оценка:
Народ, такой вопрос: в главном приложении подгружаю библиотеку с помощью Assembly.LoadFile, далее создаю инстанс класса из этой библиотеке, в данном классе создаю поток и в нем создаю форму, далее делаю Form.Show() и получаю зависшее окно, не реагирующее на сообщения и не отрисовывающее контролы, если же вызывать show для этой формы из главного потока, то все работает. В чем проблема?
Re: Форма в библиотеке
От: Aen Sidhe Россия Просто блог
Дата: 25.08.09 10:39
Оценка:
Здравствуйте, Vetal1979, Вы писали:

V>Народ, такой вопрос: в главном приложении подгружаю библиотеку с помощью Assembly.LoadFile, далее создаю инстанс класса из этой библиотеке, в данном классе создаю поток и в нем создаю форму, далее делаю Form.Show() и получаю зависшее окно, не реагирующее на сообщения и не отрисовывающее контролы, если же вызывать show для этой формы из главного потока, то все работает. В чем проблема?


Базовое правило: весь GUI винформов должен быть в одном потоке. Почему — в гугл.
С уважением, Анатолий Попов.
ICQ: 995-908
Re: Форма в библиотеке
От: RushDevion Россия  
Дата: 25.08.09 11:11
Оценка:
Думается, в новом потоке нет прокачки очереди сообщений.
Пример для размышлений:
for ( int i = 0; i < 10; ++i )
{
    System.Threading.Thread t = new System.Threading.Thread( () =>
    {
        Form form = new Form();
        //form.Show();
        Application.Run( form ); //form.ShowDialog() - тоже работает
        } );
        t.IsBackground = true;
        t.Start();
    }
}
Re[2]: Форма в библиотеке
От: agos Россия http://trtrmitya.wordpress.com
Дата: 25.08.09 18:14
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Базовое правило: весь GUI винформов должен быть в одном потоке. Почему — в гугл.

вовсе нет
просто должен быть цикл обработки сообщений
Не переходите улицу на тот свет..
Re[3]: Форма в библиотеке
От: Aen Sidhe Россия Просто блог
Дата: 25.08.09 19:32
Оценка:
Здравствуйте, agos, Вы писали:

A>Здравствуйте, Aen Sidhe, Вы писали:


AS>>Базовое правило: весь GUI винформов должен быть в одном потоке. Почему — в гугл.

A>вовсе нет
A>просто должен быть цикл обработки сообщений

SingleThreadApartment тоже просто так при старте выставляется?
С уважением, Анатолий Попов.
ICQ: 995-908
Re[4]: Форма в библиотеке
От: agos Россия http://trtrmitya.wordpress.com
Дата: 25.08.09 20:22
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>SingleThreadApartment тоже просто так при старте выставляется?

Нет, не просто так.
Drag and Drop и, скорее всего, ещё какие-нибудь OLE заморочки требуют STA, и то, только тогда, когда их используют. Но при чем здесь это?
Не переходите улицу на тот свет..
Re[3]: Форма в библиотеке
От: Vetal1979  
Дата: 27.08.09 09:17
Оценка:
Здравствуйте, agos, Вы писали:

A>Здравствуйте, Aen Sidhe, Вы писали:


AS>>Базовое правило: весь GUI винформов должен быть в одном потоке. Почему — в гугл.

A>вовсе нет
A>просто должен быть цикл обработки сообщений

А как организовать цикл обработки сообщений в новом потоке?
Re[4]: Форма в библиотеке
От: Аноним  
Дата: 27.08.09 19:24
Оценка:
Здравствуйте, Vetal1979, Вы писали:

V>А как организовать цикл обработки сообщений в новом потоке?

Можно руками (с помощью Win32), можно показать окошко как ShowModal, а можно вызвать Application.Run
Re: Форма в библиотеке
От: Vetal1979  
Дата: 02.09.09 09:29
Оценка:
Всем спасибо!
Re[2]: Форма в библиотеке
От: Аноним  
Дата: 09.09.09 11:41
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Думается, в новом потоке нет прокачки очереди сообщений.

RD>Пример для размышлений:

Есть ли способ проще ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.