Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C# Обращение из одного потока в другой

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
TreGG



Зарегистрирован: 23.06.2006
Сообщения: 2

СообщениеДобавлено: Пт Июн 23 2006 05:36    Заголовок сообщения: C# Обращение из одного потока в другой Ответить с цитатой

пишу на шарпе

Моя программа принимает данные со звуковой карты, организовано это с помощью DirectSound с использованием нотификаций. Так вот эти нотификации работают в своем потоке, а мне надо передать полученный кусок из буфера в основную программу для обработки и что самое важное - вывода данных на форму. В хелпе я нашел что это можно сделать с помощью Invoke. Все бы хорошо, но когда я закрываю программу и в этот момент происходит этот самый invoke, он в меня кидается вот такой фразой:

Exception has been thrown by the target of an invocation.

Я пошел другим путем - записываю данные в глобальную переменную и вместе с этим флажок который меняется то в одну то в другую сторону как триггер, и в основной программе у меня крутится backgroundworker, вот такой:

Код:
  private void bgCheckTrigger_DoWork(object sender, DoWorkEventArgs e)
  {
  bool lastState = ProcessTrigger;
  while (lastState == ProcessTrigger) { /* ничего не делаем */ }
  }

  private void bgCheckTrigger_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
  bgCheckTrigger.RunWorkerAsync();
  Processor();
  }


результат тот же самый правда немного пореже...

подскажите как это правильно сделать, чтобы оно не ругалось...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Пт Июн 23 2006 14:15    Заголовок сообщения: Re: C# Обращение из одного потока в другой Ответить с цитатой

TreGG писал(а):
...подскажите как это правильно сделать...


при написании многопоточных приложений необходимо выполнять следующие условия...
1) контролировать синхронные фазы подъёма/шутдауна всех потоков из основного. (Если Вы их не контрлируете, то зачем тогда вообще что либо запускать ? Ведь Вас же не волнует - работает нитка или нет ?)
2) для передачи данных между потоками (синхронизации событий) необходимо использовать системные объекты (семафоры, мьютексы, триггера и т.п.). Так же "в бой идут" критические секции.

выполнив это - убъёте падёж в своей программе. Да, сразу скажу - даже если Вы сможете поставить подпорочки под существующий вариант и он будет дышать - рекомендую сразу проверить на стрэсс тестировании. Чтоб потом не удивляться и не спрашивать, а почему у меня на одном компе работает, а на другом - нет.... и т.п..

удачи Вам
(круглый)
_________________
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TreGG



Зарегистрирован: 23.06.2006
Сообщения: 2

СообщениеДобавлено: Сб Июн 24 2006 01:18    Заголовок сообщения: Ответить с цитатой

Огромное вам спасибо! Понял в чем у меня ошибки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
YaKor



Зарегистрирован: 10.02.2006
Сообщения: 5

СообщениеДобавлено: Вт Ноя 14 2006 20:22    Заголовок сообщения: Ответить с цитатой

Радует что кто то что то понял:))))
Но объясните мне плиз придурку. У меня как раз и есть удивление от того что у меня работает а у клиента нет. Причем у всех клиентов поразному. Я в потоке печатая. И все бы здорово, тока не фига. Больше нескольких потоков вешается вся моя прога:(((((((
И если мне не изменяет память не только она. Может скажети какова я натворил?????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Вт Ноя 21 2006 14:40    Заголовок сообщения: Ответить с цитатой

YaKor писал(а):
Радует что кто то что то понялSmile)))
Но объясните мне плиз придурку. У меня как раз и есть удивление от того что у меня работает а у клиента нет. Причем у всех клиентов поразному. Я в потоке печатая. И все бы здорово, тока не фига. Больше нескольких потоков вешается вся моя прогаSad((((((
И если мне не изменяет память не только она. Может скажети какова я натворил?????


рекомендую почитать книгу
"Windows для проффессионалов" Рихтер... там думаю найдёте побольше ответов...

(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...