Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InvokeMember и многопоточность, позднее связывание и многопоточность 
:(
    Опции темы
Wanderer2019
Дата 6.7.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



Предыдущую тему можно удалять... 
В чем проблема разобрался...

Задача: Обработать большой файл Excel и записать данные в какое то хранилище.

Решение:
Для работы с файлом выбрал метод позднего связывания. т.е. вытаскиваю данные об объектах через 

Код

TheType.InvokeMember("PropertyName",BindingFlags.GetProperty, null, Instance, null)


Для обработки файла написал рекурсивную функцию, которую вызываю в потоке. Чтобы передать в функцию параметры использую глобальные переменные. И рекурсивню вызываю из обычной...
т.е. получается что то вроде такого:
Код

class test{
int param;

private void ThreadStartedFunction(){
RecurseFunction(param);
}

private int RecurseFunction(int test){}


}


В процессе выполнения поток вызывается и зависает на строчке:
Код

TheType.InvokeMember("PropertyName",BindingFlags.GetProperty, null, Instance, null)


С чем может быть проблемма??? Как InvokeMember конфликтует с тем, что функция запускается из потока?



Это сообщение отредактировал(а) Wanderer2019 - 6.7.2007, 16:34
PM ICQ MSN   Вверх
tol05
Дата 6.7.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Во-первых, рефлексия сама по себе - времязатратная вещь. Как-никак - манифест парсится каждый раз...
Во-вторых, где вызывается 
Код

TheType.InvokeMember("PropertyName",BindingFlags.GetProperty, null, Instance, null)

в рекурсии? Какая связь между 
Цитата(Wanderer2019 @  6.7.2007,  16:18 Найти цитируемый пост)
Для обработки файла написал рекурсивную функцию, которую вызываю в потоке. Чтобы передать в функцию параметры использую глобальные переменные. И рекурсивню вызываю из обычной...

и 
Код

TheType.InvokeMember("PropertyName",BindingFlags.GetProperty, null, Instance, null)

?
И покажи декларацию PropertyName, лучше всего Instance 
smile



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
mr.DUDA
Дата 6.7.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Может "виснуть" (вылетать, на самом деле) из-за необработанного исключения в Invoke. Не мешало бы завернуть InvokeMember в блок try..catch и глянуть что там получается.


--------------------
user posted image
PM MAIL WWW   Вверх
Wanderer2019
Дата 6.7.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



mr.DUDA
ну вот в чем и проблема, что не используя многопоточность все работает отлично... как только засовываю в поток виснет при первом же обращении к Invoke. 
PM ICQ MSN   Вверх
mr.DUDA
Дата 9.7.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



А в отладке посмотреть ? В конце концов, можно приаттачиться к процессу и нажать Pause Debug - в Threads покажет где находится каждый поток.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0952 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.