0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 6
|
||||||
1 | ||||||
Как передать параметры в BackgroundWorker10.01.2012, 21:25. Показов 15442. Ответов 20
Метки нет Все метки)
(
Здравствуйте. В общем надо чтобы при нажатии на кнопку выполнялась операция, но т.к. она длительная, то окно виснет до тех пор пока операция не закончится. Мне нужно наоборот, чтобы вовремя этой операции производилось логирование и отображался прогресбар(всмысле показывал сколько проделано), ну и конечно, чтобы пользователь мог параллельно с выполнением этой операцией пользоваться программой. Нашел отличный выход с ситуации backgroundWorker, но как всегда, есть "но" - мне нужно внести в backgroundWorker несколько параметров с основного потока, нашел вот такой код:
"в структуре не могут содержаться инициализаторы полей экземпляров" и "для нестатического поля, метода или свойства требуется ссылка на объект" Как правильно передать параметры? Или может есть какой-нибудь другой способ для моей задачи? Заранее спасибо!
0
|
|
10.01.2012, 21:25 | |
Ответы с готовыми решениями:
20
Как передать по ссылке параметр в BackgroundWorker
Как передать параметры в WORD? |
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
|
||||||||||||||||
10.01.2012, 21:50 | 2 | |||||||||||||||
вызывать естественно
Или вот так:
1
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
||||||
10.01.2012, 21:50 | 3 | |||||
1. Если вам непонятны эти ошибки - почитайте любую литературу по азам C#.
1.1 Если вы хотите задать начальные значения для этих переменных, используйте конструктор. 2.
1
|
![]() 17203 / 12657 / 3321
Регистрация: 17.09.2011
Сообщений: 20,932
|
|
10.01.2012, 22:08 | 4 |
iTheSaboteur, какое-то странное использование DoWorkEventArgs у вас.
code2l, в качестве быстрого фикса можете заменить struct на class и ошибки не будет.
1
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
10.01.2012, 23:18 | 5 |
kolorotur, а что именно странно?)
code2l, на всякий случай - в методе BackgroundWorker_DoWork args надо будет использовать явно приводя к MYARGS
0
|
0 / 0 / 0
Регистрация: 25.12.2011
Сообщений: 6
|
||||||||||||||||
11.01.2012, 01:26 [ТС] | 6 | |||||||||||||||
Всем спасибо.
kolorotur, изменил. Ошибка: "для нестатического поля, метода или свойства требуется ссылка на объект" все равно выбивает, когда пытаюсь передать значение textbox'a:
Может есть какой-то проще вариант передать значения с контролов в BackgroundWork? И извиняюсь, забыл уточнить, работаю в WPF, а не в WinForms. Если создам поток с помощью
0
|
![]() 17203 / 12657 / 3321
Регистрация: 17.09.2011
Сообщений: 20,932
|
||||||
11.01.2012, 01:52 | 7 | |||||
Да весь код странный. Мало того, что все выполняется в основном потоке, сам BackgroundWorker не используется вообще, да еще и обработчик запускается вручную с созданием своих аргументов.
Все-таки обработчик должен запускаться в ответ на событие, а не вручную из основного метода. А аргументы воркер сам передаст. code2l, ну вы при объявлении класса пытаетесь присвоить значения переменной, находящейся в другом классе. Надо как-то так:
1
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|||||||||||
11.01.2012, 02:07 | 8 | ||||||||||
Вариантов столько сколько нафантазируешь)
В в твоем случае можно: •использовать ParametrizedThreadStart (передавать массив/структуру приведененную к типу object и в методе, делегат которого ты "передал" потоку (извиняюсь за кривые формулировки), привести к структуре/массиву) •Вызвать нужную функцию, с нужными аргументами, в потоке- new Thread(delegate(){ BGWork(param1,param2...);} •В некоторых случаях можно просто объявить пару глобальных переменных и оперировать с ними. •И т.д. ↓↓↓ ↓↓↓
1
|
12.01.2012, 01:28 | 9 | |||||
iTheSaboteur, а каким образом передать System.__ComObject?
т.е. есть некий аддон к приложению. В нем идет присвоение некой переменной MyVar через GetActiveObject и дальше работа с присвоенной переменной. переменная объявлена на уровне класса но в BackgroundWorker она не оперируема, программа просто вылетает (даже с блоком try-catch никаких ошибок) Попробовал
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 15:11 | 10 |
skilllab а что вы именно вы делаете с этим объектом?)
Уверены-ли вы что проблема вызвана именно созданием потока? Попробуйте включить отладчик и пошагово пройтись по инструкциям.
0
|
12.01.2012, 15:31 | 11 | ||||||||||
iTheSaboteur,
естественно с отладчиком и шел. Добавлено через 3 минуты объект дает доступ к переменным и методам класса. Т.е.
а дальше хотел так
SomeObject - подключенная к проекту DLL.
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 16:04 | 12 |
skilllab, падает в какой момент? хоть в гугле глянуть что-нибудь))
0
|
12.01.2012, 16:11 | 13 | ||||||||||
так, если продолжить то что выше.
пытаюсь в DoWork сделать такое:
вечером могу даже GIF-ку сделать, чтоб показать что происходит.
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 16:16 | 14 |
skilllab, стесняюсь спросить, а вы MyNew1 инициализируете потом, или он так и остается пустым?
0
|
12.01.2012, 21:48 | 15 |
Так а разве Work(MyNew1) не должен вернуть мне полновесную переменную?
И вот ещё что, при передаче в DoWork этой переменной, она как бы не пустая (если навести в дебаге то появится System.__ComObject). Но если попробовать просмотреть доступные методы то будет вот такое окно Пробовал и другие методы передачи. Переменная передается, но при попытке присвоения типа MyNew1.SomeConst - программа слетает. То что должно быть - на 2 рисунке
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 21:52 | 16 |
Залейте куда-нибудь это добро, а то у меня ощущение будто мы на разных языках говорим
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 21:57 | 18 |
skilllab, хватит класса формы и класса MyNew1.
Не понимаю что у вас творится
0
|
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
|
|
12.01.2012, 23:54 | 20 |
Какой еще пример?.. я говорил о паре кусков кода
0
|
12.01.2012, 23:54 | |
Помогаю со студенческими работами здесь
20
передать ссылки как параметры Классы, как передать параметры Как передать параметры компилятору? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |