![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Здравствуйте,
Есть основная форма. В ней есть три ListBoxа и пара кнопок. Работа с формой непосредственно ведется в одном потоке, а основной метод, из-за его вынужденного постоянного работоспособного состояния, выполняется во втором потоке. Суть вопроса в следующем: по мере выполнения этого самого метода, цепляющего в своей работе до тучи еще всяких разных методов, должны заполняться ListBoxы, но этого заполнения не происходит... При этом в боксы запись производится не только в основном методе, но и в цепляемых... |
|||
|
||||
| KuMa1104 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Честно говоря образность и маштаб мысли, очень велики поэтому заурядному уму очень сложно понять. Конечно я понемаю что хочеться быстренько задать вопрос и получить чёткий ответ. Но так получаеться невсегда. Ты сам сказал, что
так как я должен угадать что именно там в этих методах не так?? Это вообще ужас
Глупа годать на кофейной гуще, приведи чёткую структуру своего кода, тогда поговорим. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
я так понимаю, ceZam, Вы WinForms приложение имеете в виду?
Дело в том, что любое обращение к WinForms должно всегда происходить из того же потока, который эти контролы (и форму, соответственно) создает. Наверняка Вы сталкивались с аттрибутом STAThread в коде своего приложения? Так вот, если основной поток формы в какой-то момент запускает дополнительный поток (скажем customThread), то любой код любого метода, выполняющийся в customThread, для обращения к контролам и\или форме должен использовать технологию Invoke (для WinForms) или Dispatcher (для WPF) Т.о. Вам следует почитать о: - методе Control.Invoke() - свойстве Control.InvokeRequired ну или о компоненте System.ComponentModel.BackgroundWorker, который для подобных задач и был разработан несколько позднее, по многочисленным просьбам, если можно так выразиться ) P.S. само собой разумеется, для WPF читаем о классе System.Windows.Threading.Dispatcher Это сообщение отредактировал(а) tol05 - 3.11.2009, 00:28 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Дело все в том, KuMa1104, что методы работают как им положено работать, тобишь правильно. НО я пытаюсь консольное приложение перелопатить в WinForms... Таким образом и возник вопрос по поводу заменв строки:
Я думаю, tol05, мне скорее подойдет BackgroundWorker... сегодня буду с ним разбираться... |
|||
|
||||
| KuMa1104 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
tol05 поправте меня если я неправ.
Но компилятор лиш выдаст предупреждение что мол нельзя так делать, но сам текст в textbox всё равно выведет если не в debug идёт работа. То что вы написали это конечно правильно, но мне кажеться что не совсем в этом дело. Вот такои код хоть и некоректен но однако будет работать, и выведет в textbox сообщение
Максимум вовремя debug-инга получит исключение
То что не появляеться текст, скорее всего что то гдето в другом месте нетак. Всётаки там ведь
думаю гдето там кроеться ответ. ceZam Удачи))) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||||
|
|||||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
KuMa1104, это было всего-лишь мое предположение, поскольку информации действительно было мало.
Мне показалось, что фраза
как раз и подразумавала выброс того самого исключения. Ну а то, что вне режима отладки приведенный Вами пример работает, в любом случае не означает, что он допустим на практике, не правда ли? ИМХО нужно не только стараться поощрять best practice, но и всячески пресекать bad practice ) -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
tol05 Я с Вами согласен, и этот скромный пример ни в коем мере не преследует цель к обучению плохим приёмам в програмировании, просто хотел показать автору топика что это в принципе возможно. P.S. Нужен код с примером. Так на словах угодать что нетак трудно. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Действительно, KuMa1104, Вы правы... если запускать не из debug, то все работает нормально
Да и для себя хочется узнать немного больше чем я уже знаю)) |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
ceZam это здорово, но есть вопрос..
Оно хоть заработало у тебя? -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Все проработало отлично... ну хотя почти... - У меня второй поток вызывает функцию и в конечном итоге второй поток как бы в бесконечном цикле оказывается... Короче говоря при закрытии формы второй поток так и продолжал работать))) - но на счет этого я вроде разобрался как быть)) А так все Боксы заполнились как надо))
|
|||
|
||||
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Начал разбираться как связать второй поток с головным и напоролся на на еще один, тобишь третий поток, который объявляется вот так:
Ну и у меня родился такой вопрос: Можно как-нибудь связать его хотя бы со вторым??? P.S. Как Вы могли догадаться - это серверная часть, которая должна поддерживать интерфейс. В функции ReceiveCallback далее следует почти такой же вызов других принимающих и передающих функций, но вроде все они выполняются в одном и том же потоке. Заранее спасибо. |
|||
|
||||
| ceZam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 7.7.2008 Репутация: нет Всего: нет |
Сам задал вопрос и сам же нашел на него ответ))
Кому интересно вот ссылка на статью, которая мне очень помогла: работа с потоками |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |