![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Ryan5 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
После того как форма G появилась, поток завершает работу (закрывается форма и приложение), так как делать больше нечего. Как этот поток SchemeThread сделать незавершающимся, то есть чтобы форма появилась и осталась на экране, могла реагировать на всё????? Вот как например это сделано в Application.Run(); Запустилось приложение и висит в памяти, хотя ничего не делает. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ну, на самом деле делает. Как и любое оконное приложение, ожидает действий пользователя, например, опрашивая устройства ввода, или реагирует на события, например, необходимость перерисовки. Это - стандартная очередь сообщений, message loop. Если Вы хотите, чтобы поток дожидался закрытия формы и/или получения какого-то возвращаемого значения от неё, сделайте ShowDialog() вместо Show(). -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Пример :
Только будте осторожны со статическим флажком threadFormCreated : если он не поменяет своё значение после старта потока и до создания дочерней формы, то будет довольно весело Это сообщение отредактировал(а) marcusmae - 5.4.2008, 23:50 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 4 Всего: 12 |
Ryan5, а зачем вообще так извращаться?
если в методе одной формы вызвать Show() другой формы, то новая форма будет спокойненько себе висеть на экране, реагировать на события, ожидать реакции пользователя может я не понял сути проблемы? |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ну, суть может быть такой : если одна форма занята, то другая может быть либо тоже недоступна в случае общего потока, либо очень даже доступна в случае раздельных. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Ryan5 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Ну, ShowDialog это не выход.
Если мне надо будет открыть две формы, то они станут появлятся друг за другом (после закрытия 1 будет вторая), а не обе сразу.
Да и потом, даже если все формы в потоке закрыли, сам поток должен продолжить работу. Так что нужно что-то другое. |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Создайте формы в двух разных потоках так же, как Вы для одной формы делаете, тогда они появятся почти обе сразу. Подойдёт?
Есть масса способов "удерживать" поток в нужном состоянии - циклы, таймеры, барьеры, мониторы, мьютексы и т.д. Зависит от того, что Вы намерены дальше делать с потоком. Иногда проще просто создать его заново, когда понадобится. Так что опишите задачу, желательно не словами, а блоксхемой. Это сообщение отредактировал(а) marcusmae - 6.4.2008, 12:37 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Ryan5 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Вот это как раз и нужно, просто если сделать цикл, то тормоза будут. Вот в чём суть: "Поток что-то сделал" ==> "Поток бездельничает" ==> "При каком-то условии опять что-то начинает делать" Вся проблема в том что когда поток начинает бездельничать, он завершается и всё что в нём создано пропадает. Нужно видимо в потоке что-то умное написать, чтобы он ждал выполнения условия для начала работы, а что написать не знаю. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ryan5,
во-первых, если не нужно, чтобы созданное не пропадало, можно хранить на стороне основного потока. То есть, Вы можете заводить переменные в основном потоке, а изменять их в любых других. Только следите за thread-safety : например, элементы форм нельзя изменять вне того потока, в котором они были созданы. во-вторых - альтернатива во-первых : локальность данных по потокам - это действительно хорошая идея, особенно, если данных очень много, и они текучие. Но для этого нужно знать подробности. Чем займётся поток, после того, как он покончил с формой и подождал? Действует ли он циклически? Кому нужны его данные? = В общем, чем корявее это объяснить, тем хуже будет решение. Предлагаю рисовать. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Ryan5 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
marcusmae, попробую наверное сделать как вы в первом варианте написали, а то с этими потоками можно голову сломать. Спасибо.
|
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Да больше, наверно, проблема в качественном проектировании Вашей задачи, чем непосредственнно с потоками. Будут вопросы - обращайтесь
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |