powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / открыть новое окно из нового потока
8 сообщений из 8, страница 1 из 1
открыть новое окно из нового потока
    #40013799
qlewerok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в окне отправляется запрос серверу, дожидается ответ в асинхронной процедуре вида
Код: vbnet
1.
Private Sub otpravkaonline3(ByVal asynchronousResult As IAsyncResult)

, в ней открывается второе окно
окно, запущенное из нового потока через Form1.Show() запускается, но оно заблокировано, песочные часы, даже закрыть нельзя. подскажите, как запускать окна из неглавного потока?
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013804
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это потому что поток не GUIшный. Задача стандартная, я это делал еще на первом дотнете. Лет 20 назад. Поэтому точно не помню. Кажись надо в созданном потоке вызывать Application.Run(...), т.е. все так же как ты в Main делаешь.
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013939
qlewerok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthis, спасибо, помогло)
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013953
qlewerok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но я не могу теперь закрыть это новое окно. me.close() из него закрывает все окна, хотя по логике оно должно быть дочерним и закрывать только себя, оставляя главное
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013958
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qlewerok
но я не могу теперь закрыть это новое окно. me.close() из него закрывает все окна, хотя по логике оно должно быть дочерним и закрывать только себя, оставляя главное

А его не надо делать дочерним, оно должно быть еше одним главным. Так-то это вообще в Windows API быть не должно, что бы родительское окно жило в одном потоке, а дочернее в другом.

Код: c#
1.
2.
3.
4.
static async Task Main() => await Task.WhenAll(
    Task.Run(() => Application.Run(new Form { Text = "Я форма 1" })),
    Task.Run(() => Application.Run(new Form { Text = "А я форма 2" }))
);
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013961
qlewerok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, получилось, надо было запускать окно правильно:
Код: vbnet
1.
Me.Invoke(Sub() Form1.Show())

теперь оно закрывается, на затрагивая главное, никакие Application.Run не нужны
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40013971
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qlewerok
никакие Application.Run не нужны

Фиг там. Application.Run создает очередь сообщений и цикл её обработки в том потоке, который его вызвал. А без них у тебя нифига работать не будет. Но, тебе виднее, делай как знаешь - сам же потом сюда вернешься с "почему у меня все не работает"
...
Рейтинг: 0 / 0
открыть новое окно из нового потока
    #40014037
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qlewerok,

Впрочем погоди. Тебе что точно надо? Два разных окна в двух разных потоках, или просто окно в главном потоке открыть вызовом из другого потока? Если второе, то ты делаешь все правильно - вызов через Invoke.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / открыть новое окно из нового потока
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]