Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

vriadchenko


Принципиальный молчун

Зарегистрирован:
24 April 2008
Сообщения: 2
Примеры кода: 0
 

Подвисает основной поток формы при работе с несколькими threads

24 April 2008 16:12  


Есть основная форма с интерфейсом.
Есть несколько потоков работающих параллельно и периодически забрасывающих данные в общую очередь.
Есть выделенный поток который в случае появления данных в очереди дает команду интерфейсу считать из базы данные и отобразить в гриде.
Есть таймер который раз в секунду обновляет лейбл на экране - просто часы.
В какой-то не поддающийся определению момент основной поток формы зависает. Т.е. форма перестает вообще обрабатывать сообщения - останавливает таймер (ибо работает от сообщений формы),
напрочь визуально зависает и не перерисовывается грид и т.д.
При этом все параллельные потоки поставщики данных продолжают работать и складывать данные, поток обновляющий форму успешно их подхватывает и дает форме команду BeginInvoke после чего выходит из обработки как и положено, но в потоке формы BeginInvoke не вызывает обработчик и соответственно ничего на экране не обновляет.
Что делать? Куда копать? Какие куски кода нужно предоставить для более детального анализа? Есть ли какие-то тонкости как можно отловить где конкретно сейчас повисла основная форма, может она ждет какой-то ресурс, как узнать какой?



delegate void dProceedEvent(int intId);

private void ProceedEvent(int id)
{
if (this.InvokeRequired)
{
cLog.WriteSQLLog(logPlaces.lpfrmMain, "Заход в обработку ИД");
dProceedEvent d = new dProceedEvent(ProceedEvent);
this.BeginInvoke(d, new object[] { id });
return;
}
try
{
//работа с базой и работа с гридом через bindingsource
//никаких залочек здесь не используется

//единственное что настораживает не приводит ли к проблемам использование статичных функций класса
//здесь местами вызывается логгер но там стоит проверка по которой просто возвращается обратно

}
catch (Exception ex)
{
cLog.WriteSQLLog(logPlaces.lpfrmMain, "Выход из обработки ИД с ошибкой " + ex.StackTrace.ToString() + " " + ex.ToString());//этот вызов внутри проверяет переменную и возвращается обратно
cLog.WriteLog("Выход из обработки ИД с ошибкой " + ex.StackTrace.ToString() + " " + ex.ToString());//вот этот код реально пишет в текстовый файл
}
}


Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 24 April 2008 16:12
Наверх
  



Winforms

 Подвисает основной поток формы при работе с несколькими threadsvriadchenko  24 April 2008 16:12
 RE: Подвисает основной поток формы при работе с несколькими threadsНачинающий программист  26 April 2008 21:17
 RE: Подвисает основной поток формы при работе с несколькими threadsCamarada  05 May 2008 11:14
 RE[2]: Подвисает основной поток формы при работе с несколькими threadsНачинающий программист  05 May 2008 13:41
 Подвисает основной поток формы при работе с несколькими threadswebb  24 April 2008 17:44
 Подвисает основной поток формы при работе с несколькими threadsvriadchenko  24 April 2008 17:53
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта