Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как создать форму в отдельном потоке?


Автор: VisMaster 22.1.2008, 22:57
Здравствуйте.

Проблема в следующем: У меня есть основная форма которую я запускаю так:
Код

Application.Run(new mainForm());

в ней мне надо зарустить другую форму, я запускал с помощью NEWForm.ShowDialog(), но этот метод обрабатывает только одно событие и закрывает NEWForm . Чтобы решить эту проблему, я думаю, что мне надо запустить NEWForm в отдельноом потоке, подскажите пожалуйста как это сделать?

Заранее благодарен. 

Автор: CYBERDREAM 22.1.2008, 23:07
Код

Form2 f2=new Form2();
f2.ShowDialog()

Или я не в ту степь урыл smile 

Автор: VisMaster 22.1.2008, 23:17
Цитата

я запускал с помощью NEWForm.ShowDialog(),но этот метод обрабатывает только одно событие и закрывает NEWForm

А мне нужно второй раз запустить что то типо  Application.Run(new NewForn()), но если я так пишу то он мне выдает искдючение:
Цитата

Starting a second message loop on a single thread is not a valid operation. Use Form.ShowDialog instead.

Автор: CYBERDREAM 22.1.2008, 23:29
На сколько я понял, тебе нужно при загрузке приложения, запустить дубликат. Тогда через System.Diagnostics.Process.Start(Application.ExecutablePath);

Автор: VisMaster 22.1.2008, 23:58
не это не совсем то что мне нужно.

Вот то что мне нужно:
у меня есть две разные формы (первая: MainForm, вторая: NewForm), первая запускается при запуске приложения с помошью такого кода:
Код

                MainForm MyMainForm = new MainForm();
                Application.Run(MyMainForm);

а вторая форма должна запускаться при нажатии на кнопку.

Так вот если я вторую форму (NewForm) запускаю так:
Код

NewForm f2=new NewForm();
f2.ShowDialog()

то он обрабатывает только одно событие, а мне нужно несколько. Выход в следующем: мне нужно: создать новый поток и запустить форму NewForm в этом отдельном потоке. Как мне это сделать?

Автор: QryStaL 23.1.2008, 00:43
Цитата(VisMaster @  22.1.2008,  23:58 Найти цитируемый пост)
то он обрабатывает только одно событие, а мне нужно несколько.


Там все нормально обрабатывается, и не надо никаких других потоков. Или тогда поясни подробнее, что имеется в виду...  smile 

Автор: VisMaster 23.1.2008, 00:53
на форме у меня 3 кнопки, на каждую повешено по событию Click, так вот если я  вызывая ShowDialog():

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

Автор: jonie 23.1.2008, 01:42
я так понимаю он говорит о модальности второго окна, и ему надо N экзепляров объектов типа Form2
Код

        private Form2[] forms = new Form2[10];
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 10; i++ )
            {
                forms[i] = new Form2();
                forms[i].Show();
            }
        }

Автор: VisMaster 23.1.2008, 02:13
Нет я не то имел ввиду.

мне не нужны 10 разных форм, я хочу в форме вызванной методом Application.Run(new Form1()) , вызвать другую форму тоже методом Application.Run(new Form22()). как мне это сделать?

Все спасибо разобрался

Автор: CYBERDREAM 23.1.2008, 09:13
Цитата(VisMaster @ 23.1.2008,  02:13)
Нет я не то имел ввиду.

мне не нужны 10 разных форм, я хочу в форме вызванной методом Application.Run(new Form1()) , вызвать другую форму тоже методом Application.Run(new Form22()). как мне это сделать?

Все спасибо разобрался

А ну колись в чем подвох был, а то я так и не понял до конца, что требовалось  smile 

Автор: ProgrammingLife 15.2.2008, 01:35
Что нужно сделать ? в первой форме происходит вызов второй формы идет подсчет и мне нужно что бы результат был в превой форме в label1.Text вот код:

Form1 f1e = new Form1();
            
           f1e.label1.Text = label1.Text;
           f1e.ShowDialog();

выходит третье окно Form1  каким методом сделать что бы была одна форма что нужно сделать ? помогите    

Автор: Softaz 19.2.2008, 13:28
Используй делегаты/события

Добавлено через 1 минуту
http://rsdn.ru/article/dotnet/delegat.xml

Автор: CasperSC 11.5.2010, 01:16
Сори, создал сообщение с ошибкой в коде пришлось удалить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)