![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
Доброго времени суток!
сталкнулся с такой проблемой. Есть форма, которая вызывает метод и метод постоянно работает пока неполучит данные, пока метод работает то все кнопки на форме неработают. Метод работает в отдельном потоке.
подскажите как можно сделать чтоб форма работала нармально пока выполняется метод?Если так возможно сделать. |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Используй BackgroundWorker и жизнь тебе покажется проще.
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
с потоками совсем недавно начал работать, можеш какой нибудь простенький примерчик с BackgroundWorker показать?как его использовать в моем случае
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
http://wladm.narod.ru/C_Sharp/backgroundwork.html
http://msdn.microsoft.com/ru-ru/library/sy...oundworker.aspx --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
попробовал сделать с помощью BackgroundWorker. Но он мне неподходит. У меня два метода, при нажатии на кнопку вызывается первый метод, когда он получает результат тогда вызывается второй, второму методу надо передать результат который получил первый метод. А BackgroundWorker как я понял возвращает только 1 результат. Может есть какое нибудь другое решение или как нибудь можно заставить BackgroundWorker возвращать несколько результатов? Подскажите пожалуйста!!
|
|||
|
||||
| Sfate |
|
|||
![]() Angry Beaver ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 7.9.2008 Где: mov AL, BL Репутация: нет Всего: нет |
щас меня затюкают
ставишь в начале... где у тебя обьявляются переменные... --------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Ну и в чём проблема, объедини оба этих метода в один. -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| golfV |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
вот мои два метода
вот так я их вызываю
как мне кажется обьеденить их невозможно, так как результаты они заносят в разные текстбоксы Это сообщение отредактировал(а) golfV - 5.2.2010, 09:57 |
||||||
|
|||||||
| KelTron |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Не вижу чтобы второй метод использовал результат первого.
У него результат object, значит чё угодно можно запихать, например:
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||||
|
|||||||
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
второму методу надо передать s1
которое возврашает первый метод за пример с BackgroundWorker большое спасибо, буду пробовать Это сообщение отредактировал(а) golfV - 5.2.2010, 17:00 |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Если ты думаешь, что после выполнения FindFirst(myPort, s1) строка s1 изменяется, то ты ошибаешься. В метод передаётся копия ссылки на s1, котрая изменяется в методе, но оригинал это не затрагивает. -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
так тоже неполучается. Так как после того как первый метод закончил работу он должен передать значение текст боксу, только потом начинает работать второй метод. А щас получается что они все в начале отработаю потом только результаты появятся в текстбоксах. Всю голову уже сломал как это сделать |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Ну если это принципиально... Сделать то не сложно, ты вот только скажи откуда у тебя берутся параметры: myPort, s2, s1? А то непонятно какой код там должен быть. Добавлено через 14 минут и 23 секунды В общем вот тебе пример набросал, думаю вопросы должны отпасть. Присоединённый файл ( Кол-во скачиваний: 3 )
WindowsFormsApplication13.rar 36,35 Kb-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| golfV |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
Ситуация такая, есть измерительное устроиство подключеное к компу, метод Findfirst каждые несколько секунд проверяет его
на наличее нужной инфы, если получил нужную то записывает результат в переменую s1 и выводит в текстбокс, далее начинает работать второй метод FindSecond ему передается результат первого метода s1, когда метод получает нужную инфу он записывает второй результат в переменую s2.
в главном методе это все записывается последовательно записывается в текст боксы текстбоксы.Т.е пока первый метод несчитает нужную информацию с прибора метод будет выполняться также и второй.
Это сообщение отредактировал(а) golfV - 5.2.2010, 17:36 |
||||
|
|||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
А сначала по другому было..) Только вот смысла передавать s1 в метод FindFirst, также как и s2 в FindSecond нет никакого, потому что они там не изменяются и не используются. Надо так:
Ну и методы соответственно подкорректировать. Это сообщение отредактировал(а) KelTron - 5.2.2010, 17:43 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| golfV |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
а мне кажется что нет ). Первому методу я передаю имя порта и пустую переменную, которую он мне вернёт после
прохождения метода.
и второму методу я также передую пустyю переменую s2 которую он мне вернет с результатом и переменую s1 с результатом первого метода чтоб с ней во втором методе сравнивать.
Наверное я что то непонял) Добавлено через 1 минуту и 22 секунды в любом случае огромное спасибо за такие подробные примеры и советы. |
||||
|
|||||
| KelTron |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Сравним 2 метода:
В чём недостатки первого: 1. Лишний бесполезный параметр. 2. Параметр используется как локальная переменная, что является признаком дурнопахнущего кода. Каждая переменная должна использоваться для одной цели, также и с параметрами - они нужны для получения информации, т.е. для чтения, если они явно не указаны как ref или out. Несколько советов как нужно изменить метод FindFirst и по аналогии FindSecond 1. Нужно избавиться от кода с потоками(мы и так уже используем BackgroundWorker)
2. Убираем ненужный параметр
3. goto здесь не нужен, без него код понятнее
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||||||
|
|||||||||
| golfV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 4.11.2007 Репутация: 1 Всего: 1 |
KelTron огромное спасибо за помощь сам бы несправился, сделал по твоему примеру с BackgroundWorker. Методы тоже поправил по твоему совету. Все работает отлично! еще раз спасибо!!!
Это сообщение отредактировал(а) golfV - 6.2.2010, 02:01 |
|||
|
||||
| uranpro |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: 1 Всего: 1 |
добавлю немного=)
для работы с контролами, созданными в других потоках следует использовать
работа с потоками: Клац =) -------------------- I want a perfect soul |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |