Разные формы в разных потоках
От: ЧТО-ТО НЕ ТО  
Дата: 10.10.05 21:46
Оценка:
Вот, здравствуйте Дорогие Друзья!

У меня возник тут вопрос, помогите пожалуйста, быть может его где-то и рассматривали, но после поверхностного поиска по форуму я не нашел ответа.
Так вот:
Значит, есть одна форма ее поддерживает один поток, так вот мне надо открыть вторую форму но уже в другом потоке. Короче чтобы у двух форм были разные потоки. Такой вот код не помогает:


        private void button1_Click(object sender, System.EventArgs e)
        {
            t = new Thread(new ThreadStart(OpenForm2));        
            t.Start();
        }

        private void OpenForm2()
        {
            Form2 f2 = new Form2();
            f2.Show();
        }


а происходит следующее: мой поток t выполнив процедуру OpenForm2 и не собирается дальше следить за формой второй, а берет и убивается. Так что форма вторая тоже за ним закрывается. Так вот как определить для второй формы ее UI поток?
Re: Разные формы в разных потоках
От: ЧТО-ТО НЕ ТО  
Дата: 10.10.05 22:00
Оценка:
Да, кстати, прошу не надо мне напоминать о том что UI должен держать один поток.
Re: Разные формы в разных потоках
От: alseides  
Дата: 10.10.05 23:56
Оценка:
f2.ShowDialog
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: Разные формы в разных потоках
От: ЧТО-ТО НЕ ТО  
Дата: 11.10.05 17:37
Оценка:
Да, спасибо, подействовало. Оказалось все так просто.
Разные формы в разных потоках
От: Аноним  
Дата: 11.10.05 06:32
Оценка:
Во втором потоке создай свою очередь обработки сообщений:
private void button1_Click(object sender, System.EventArgs e)
{
     t = new Thread(new ThreadStart(OpenForm2));        
     t.Start();
}
private void OpenForm2()
{
     Form2 f2 = new Form2();
     Application.Run(f2);
}
ICQ: 326084932


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Разные формы в разных потоках
От: syrompe  
Дата: 13.10.05 09:47
Оценка:
Здравствуйте, ЧТО-ТО НЕ ТО, Вы писали:
ЧТН>
ЧТН>        private void button1_Click(object sender, System.EventArgs e)
ЧТН>        {
ЧТН>            t = new Thread(new ThreadStart(OpenForm2));        
ЧТН>            t.Start();
ЧТН>        }

ЧТН>        private void OpenForm2()
ЧТН>        {
ЧТН>            Form2 f2 = new Form2();
ЧТН>            f2.Show();
ЧТН>        }
ЧТН>


вообщето f2.show() как раз таки и создает отдельный поток для формы (этим и отличается от showdialog). так что можно все это дело короче записатьЧТН>
        private void button1_Click(object sender, System.EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        }

эффект будет тот же
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Разные формы в разных потоках
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 13.10.05 15:19
Оценка:
Здравствуйте, syrompe, Вы писали:

S>вообщето f2.show() как раз таки и создает отдельный поток для формы (этим и отличается от showdialog)

О! А вот где бы прочитать про такие подробности?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[2]: Разные формы в разных потоках
От: ЧТО-ТО НЕ ТО  
Дата: 13.10.05 21:13
Оценка:
S>вообщето f2.show() как раз таки и создает отдельный поток для формы (этим и отличается от showdialog). так что можно все это дело короче записатьЧТН>
S>
S>        private void button1_Click(object sender, System.EventArgs e)
S>        {
S>            Form2 f2 = new Form2();
S>            f2.Show();
S>        }
S>

S>эффект будет тот же

Не, я тут проверял, если просто Show(), то тогда как раз остается тот же UI поток, так как можно первой форме дать что-нибудь посчитать, ну допустим даже можно бесконечный цикл запустить, так вот второе окно тоже не будет откликаться. А когда создаешь в новом потоке новую форму с помощью ShowDialog() все хорошо получается.
Re[2]: Разные формы в разных потоках
От: Аноним  
Дата: 14.10.05 15:45
Оценка:
>А когда создаешь в новом потоке новую форму с помощью ShowDialog() все хорошо получается.

Просто ShowDialog запускает свой цикл выборки сообщений из потока. А с использованием Show цикл нужно запускать явно (как Вам уже показали при помощи Application.Run)



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