![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
arsenium |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.5.2009 Репутация: нет Всего: нет |
Здравствуйте! Подскажите куда копать, разбираюсь с потоками в c#.
И возник такой вопрос, к примеру есть метод читающий обычный txt файл в переменную, и это чтение происходит в отдельном потоке, как получить доступ к этой переменной из главного потока? К примеру метод:
И вызываем этот метод в потоке:
Вот к примеру, если такой код, и мне нужно в классе Form1 после выполнения потока достать то, что записалось в переменную FileText и вывести это ее в TextBox1 на форме. |
||||
|
|||||
KuMa1104 |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
ну как самый простой вариант хранить данные в какой то переменной и передать.
В форме сделать отдельную ф-ию
вызываеш ф-ию
Это сообщение отредактировал(а) KuMa1104 - 1.6.2011, 20:51 -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||||
|
|||||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
А вообще нафиг отделбную ф-ию её тоже в делегат пихай)
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
В приведенном тобой примере доступ к считанным данным можно получить так:
![]() Это сообщение отредактировал(а) Dennnis - 2.6.2011, 05:28 --------------------
Get Rich or Die Tryin' |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Dennnis, а какой в этом смысл? зачем запускать чтение в отдельном потоке и ждать пока оно закончится? параллельные потоки нужны тогда когда нельзя ждать, и нужно что бы задача выполнилась в фоне пока приложение выполняет какую то другую задачу. а у тебя получилось что приложение запускает поток, а потом просто ждет пока поток закончит читать. к тому же ты уверен что отведенного тобой времени хватит на то что бы закончить чтение? пока что может и хватит, а в будущем?
|
|||
|
||||
arsenium |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.5.2009 Репутация: нет Всего: нет |
KuMa1104, хм, спасибо большое.
но тут я так понял сразу в textBox результат выводит, а сильно усложнится если сначала присвоить результат промежуточной переменной TempText, а только потом присвоить ее TextBox1.Text, так ведь по идее можно?
А тут немного не понял... |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
лучше вместо создания Thread-а (как в примерах выше) использовать либо BackgroundWorker либо Task
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
так по идее плохо. У тебя TextBox1 был создан в другом потоке. это crossthread. В debug будет вообще кидать exception. TextBox1.Invoke // почитай он как раз и вызывает поток которому принадлежит. разберись с этим это очень полезная штука. и про BackgroundWorker тоже почитай .jonie прав это оч сильная штука. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Нету смысле) Я просто написал как получить доступ к данным записанных другим потоком ![]() Это сообщение отредактировал(а) Dennnis - 2.6.2011, 14:10 --------------------
Get Rich or Die Tryin' |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Dennnis, а ждать зачем?
|
|||
|
||||
arsenium |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.5.2009 Репутация: нет Всего: нет |
||||
|
||||
Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Если не ждать, то можно получить некорректные данные, потому что поток не успеет завершить запись в переменную --------------------
Get Rich or Die Tryin' |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Dennnis, ага, и я про это говорю, приложение должно дождаться выполнения потока(кстати, не факт что того времени что ты отвел хватит, про это я уже тоже говорил). и получается что смысла во всем этом нету. точно такая же логика получиться если не использовать второй поток вообще, а все сделать в основном потоке. программа не будет выполняться дальше пока не закончит читать данные. возвращаясь к тому с чего я начал: так для чего нужно использовать второй поток? выигрыша с него нету, только проблемы с реализацией.
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
вот набрасал быстро
на форме две кнопки и textbox (первая стартует процесс, вторая cancel-ит). Больше ниче делать не надо (разве что имя файла поменять) 8-) Для удобства работа вынесена в отдельный класс.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |