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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NotSupportedException при добавлении в коллекцию 
V
    Опции темы
dAlex
Дата 26.1.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



Код

 public void OnNewMyTrades(IEnumerable<MyTrade> myTrades)
        {
            
        
            foreach (var myTrade in myTrades)
            {
                var trade = myTrade.Trade;
                
                _StrikeCollection.Add(new StrikeData
                {
                    Strike = _StrikesTableR2[_Cnum].Strike,
                    LimToEndOfDayBuy = 0,
                    LimToEndOfDaySell = 0,
                    LimToEndOfSessionBuy = 0,
                    LimToEndOfSessionSell = 0,
                    PosBuy = 0,
                    PosSell = 0
                });
           }
   }


при  _StrikeCollection.Add вываливается NotSupportedException с текстом This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread. Пока гуглю, но не могу понять, в чем дело. _StrikeCollection и _StrikesTableR2 обе имеют тип ObservableCollection
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
jonie
Дата 26.1.2011, 11:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



ну надо добавление вызывать в том же потоке что и созданная коллекция. Т.е. использовать  Dispatcher.CurrentDispatcher.Invoke () для маршалинга между потоками


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
dAlex
Дата 26.1.2011, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



jonie, а можете объяснить поподробнее, не встречалась еще с потоками? дело в том, что в других местах проги я таким же образом спокойно добавляю элементы коллекции, такая штука возникла почему-то только здесь. OnNewMyTrades это обработчик события (из другого класса), может, в этом дело?

Это сообщение отредактировал(а) dAlex - 26.1.2011, 12:12
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
dAlex
Дата 26.1.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



если вызывать Dispatcher для объекта окна, что мне писать в качестве параметров BeginInvoke?
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
dAlex
Дата 26.1.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



засунула туда делегат, посмотрю, что скажет

upd: ура, работает smile

если кто поиском будет искать, вот решение проблемы.

Код

//засунула весь код, производящий действия с коллекциями, в отдельную функцию
   void AddDataByNewTrade(Trade trade)
  {
   ....
  }

//создала делегат для нее
  private delegate void AddDataByNewTradeDelegate(Trade trade);

//далее, в обработчике событий сделала так
public void OnNewMyTrades(IEnumerable<MyTrade> myTrades)
        {
            foreach (var myTrade in myTrades)
            {
                var trade = myTrade.Trade;               
                MainWindow.Instance.Dispatcher.BeginInvoke(new AddDataByNewTradeDelegate(AddDataByNewTrade));                              
            }
        }


Это сообщение отредактировал(а) dAlex - 26.1.2011, 14:03
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
dAlex
Дата 26.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



хотя нет, рано радовалась.
Незаметненько, позади окон, вылезает вот такая штука:

user posted image

понятно, что надо добавить второй параметр в BeginInvoke(), но он так какого-то непонятного вида params Object[] args, как туда передать Trade trade?

upd: все, просто нужно было написать
Код

MainWindow.Instance.Dispatcher.BeginInvoke(new AddDataByNewTradeDelegate(AddDataByNewTrade), trade);        


Это сообщение отредактировал(а) dAlex - 26.1.2011, 15:50
--------------------
eof()
PM WWW ICQ GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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