Проблема с Dispatcher потоками (WPF)
От: WhiteMonk  
Дата: 17.02.10 18:25
Оценка:
Доброго времени суток....

Подскажите пожалуйста, столкнулся с проблемой следующего характера на WPF:

Я асинхронно получаю по сетке какое-то количество данных, которое мне нужно вывести пользователю.
При получении, я отправляю полученные данные в таблицу (используя this.listView1.Dispatcher.BeginInvoke(new SetItemsSourceDelegate(this.SetDatatoListDispatcher), _tmp);).
Тут все прекрасно работает, данные появляются в таблице...
Далее я хочу вывести количество данных, какие есть, в таблицу. Результат записывается в TextBlock, соответственно мне WPF просто так ничего сделать не дает и я данные записываю перейдя в поток TextBlock'a
(используя this.textBlock1.Dispatcher.BeginInvoke(new SetQuantityDelegate(this.SetCount), new object[] { this.textBlock1, _failure });).

Но вот тут-то и возникает проблема! Вылезает ошибка при попытке перейти в поток TextBlock'a
(что странно, на одной машине все прекрасно работает, а на другой вылетает ошибка)
Может я что-то упустил?
Дайте совет, что делать, где копать или же если кто знает, поделитесь решением данной проблемы...

Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?
(я имею ввиду следующее:
startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)

Заранее благодарю...
Re: Проблема с Dispatcher потоками (WPF)
От: MxKazan Португалия  
Дата: 17.02.10 19:28
Оценка:
Здравствуйте, WhiteMonk, Вы писали:

WM>Но вот тут-то и возникает проблема! Вылезает ошибка при попытке перейти в поток TextBlock'a

WM>(что странно, на одной машине все прекрасно работает, а на другой вылетает ошибка)
WM>Может я что-то упустил?
WM>Дайте совет, что делать, где копать или же если кто знает, поделитесь решением данной проблемы...
Хочется поглядеть на текст ошибки.

WM>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?

WM>(я имею ввиду следующее:
WM> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)
Что значит "просит проставить приоритеты"? MessageBox что-ли показывает?
...возможно разные версии FW. Где-то с первым сервис паком, где-то без...
Re: Проблема с Dispatcher потоками (WPF)
От: Codechanger Россия  
Дата: 17.02.10 19:29
Оценка:
Здравствуйте, WhiteMonk, Вы писали:
WM>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?
WM>(я имею ввиду следующее:
WM> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)

WM>Заранее благодарю...


Версии фреймворка на машинах озвучьте. Подозреваю, что на одной 3.5 sp1, а вот на другой что-то явно меньшее...
Re[2]: Проблема с Dispatcher потоками (WPF)
От: WhiteMonk  
Дата: 17.02.10 19:39
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, WhiteMonk, Вы писали:


WM>>Но вот тут-то и возникает проблема! Вылезает ошибка при попытке перейти в поток TextBlock'a

WM>>(что странно, на одной машине все прекрасно работает, а на другой вылетает ошибка)
WM>>Может я что-то упустил?
WM>>Дайте совет, что делать, где копать или же если кто знает, поделитесь решением данной проблемы...
MK>Хочется поглядеть на текст ошибки.

Текст ошибки на память не помню боюсь ошибиться. Завтра на работе напишу, что за ошибка вылезает...


WM>>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?

WM>>(я имею ввиду следующее:
WM>> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM>> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)
MK>Что значит "просит проставить приоритеты"? MessageBox что-ли показывает?
MK>...возможно разные версии FW. Где-то с первым сервис паком, где-то без...

Может быть кстати, разные версии FW, за своей машиной-то я слежу (обновления, сервис паки), а вот про другие машины не знаю...
Что-то я не подумал об этом, хотя надо было бы подумать в первую очередь...
Re[2]: Проблема с Dispatcher потоками (WPF)
От: WhiteMonk  
Дата: 17.02.10 19:41
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Здравствуйте, WhiteMonk, Вы писали:

WM>>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?
WM>>(я имею ввиду следующее:
WM>> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM>> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)

WM>>Заранее благодарю...


C>Версии фреймворка на машинах озвучьте. Подозреваю, что на одной 3.5 sp1, а вот на другой что-то явно меньшее...


Возможно вы правы, я не подумал об этом...завтра посмотрю... но на моей машине однозначно FW 3.5 sp1.
Re[2]: Проблема с Dispatcher потоками (WPF)
От: WhiteMonk  
Дата: 18.02.10 09:49
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, WhiteMonk, Вы писали:


WM>>Но вот тут-то и возникает проблема! Вылезает ошибка при попытке перейти в поток TextBlock'a

WM>>(что странно, на одной машине все прекрасно работает, а на другой вылетает ошибка)
WM>>Может я что-то упустил?
WM>>Дайте совет, что делать, где копать или же если кто знает, поделитесь решением данной проблемы...
MK>Хочется поглядеть на текст ошибки.

Текст ошибки: "Не соответствие числу параметров"

В общем и целом это мой косяк.
Суть в том, что я передаю в функцию object[], принимающую 2-а параметра TextBlock и count.
Но все же спасибо вам, что откликнулись на проблему.
Re[2]: Проблема с Dispatcher потоками (WPF)
От: WhiteMonk  
Дата: 18.02.10 09:53
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Здравствуйте, WhiteMonk, Вы писали:

WM>>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?
WM>>(я имею ввиду следующее:
WM>> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM>> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)

WM>>Заранее благодарю...


C>Версии фреймворка на машинах озвучьте. Подозреваю, что на одной 3.5 sp1, а вот на другой что-то явно меньшее...


FW 3.5 sp1 не удалось поставить на машину начальника, черт его знает почему (2-а часа убил на попытку установить sp1)

А в общем и целом это мой косяк оказался.
Суть в том, что я передаю в функцию object[], принимающую 2-а параметра TextBlock и count. Тут-то он и падал...
Но все же спасибо вам, что откликнулись на проблему.
Re[3]: Проблема с Dispatcher потоками (WPF)
От: MxKazan Португалия  
Дата: 18.02.10 10:19
Оценка:
Здравствуйте, WhiteMonk, Вы писали:

WM>FW 3.5 sp1 не удалось поставить на машину начальника, черт его знает почему (2-а часа убил на попытку установить sp1)

Можно попробовать снести все FW и поставить с нуля только 3.5 SP1. Он за собой подтянет и 1-й и 2-й FW.
Re[3]: Проблема с Dispatcher потоками (WPF)
От: Codechanger Россия  
Дата: 18.02.10 10:50
Оценка:
WM>FW 3.5 sp1 не удалось поставить на машину начальника, черт его знает почему (2-а часа убил на попытку установить sp1)

Есть там проблемы с установкой на 64битные машины...
Re: Проблема с Dispatcher потоками (WPF)
От: Vladek Россия Github
Дата: 18.02.10 12:17
Оценка:
Здравствуйте, WhiteMonk, Вы писали:

WM>Доброго времени суток....


WM>Подскажите пожалуйста, столкнулся с проблемой следующего характера на WPF:


WM>Я асинхронно получаю по сетке какое-то количество данных, которое мне нужно вывести пользователю.

WM>При получении, я отправляю полученные данные в таблицу (используя this.listView1.Dispatcher.BeginInvoke(new SetItemsSourceDelegate(this.SetDatatoListDispatcher), _tmp);).
WM>Тут все прекрасно работает, данные появляются в таблице...
WM>Далее я хочу вывести количество данных, какие есть, в таблицу. Результат записывается в TextBlock, соответственно мне WPF просто так ничего сделать не дает и я данные записываю перейдя в поток TextBlock'a
WM>(используя this.textBlock1.Dispatcher.BeginInvoke(new SetQuantityDelegate(this.SetCount), new object[] { this.textBlock1, _failure });).

WM>Но вот тут-то и возникает проблема! Вылезает ошибка при попытке перейти в поток TextBlock'a

WM>(что странно, на одной машине все прекрасно работает, а на другой вылетает ошибка)
WM>Может я что-то упустил?
WM>Дайте совет, что делать, где копать или же если кто знает, поделитесь решением данной проблемы...

Использовать CollectionView в качестве источника данных для ItemsSource, в TextBlock отображать количество элементов с помощью обыкновенного биндинга. Судя по вопросам, вы вообще не пользуетесь биндингами, а пишите код как в WinForms. В результате, тривиальная задача превращена в рулоны кода.

WM>Да и еще вопросик, на моей машине, на висте, Dispatcher.BeginInvoke не просит поставить приоритеты в своей функции, а на некоторых машинах просит, с чем это связано?

WM>(я имею ввиду следующее:
WM> startStopButton.Dispatcher.BeginInvoke(new NextPrimeDelegate(CheckNextNumber)); и
WM> startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));)

Это связано с разными вариантами сигнатур метода BeginInvike, очевидно. BeginInvoke существует также в виде методов-расширений, доступных начиная с .NET 3.5 SP1.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.