Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 0 / 1
Регистрация: 06.05.2013
Сообщений: 17
1

"Подружить" объекты из разных потоков

11.10.2013, 19:16. Показов 831. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется асинхронный сервер с событием на получение данных, это событие обрабатывают несколько классов (что кого касается), один из классов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public delegate void ImageEventHandler(BitmapImage image);
        public event ImageEventHandler AcceptImage;
 
        private void Data_Received(byte command, byte[] data)
        {
            if (command != 0x20) { return; }
 
            BitmapImage image = new BitmapImage();
            using (MemoryStream stream = new MemoryStream(data))
            {
                image.BeginInit();
                image.StreamSource = stream;
                image.EndInit();
            }
            AcceptImage(image);
        }
Событие AcceptImage обрабатывает непосредственно окно, которое должно установить Image.Source, собственно:
C#
1
2
3
4
5
6
        private void AcceptImage(BitmapImage image)
        {
            //c_image.Source = image;
            //Dispatcher.BeginInvoke(new Action(() => { c_image.Source = image; }));
            Dispatcher.BeginInvoke(new Action<BitmapImage>((arg) => { c_image.Source = arg; }), image);
        }
В первом случае c_image не из того потока, в следующих на image ругается, даже так пытался:
C#
1
2
3
4
5
6
7
8
        private void AcceptImage(BitmapImage image)
        {
            Dispatcher.BeginInvoke(new Action(() => 
            {
                BitmapImage i = image;
                c_image.Source = i; 
            }));
        }
Как побороть эту проблему? Если не как и надо менять архитектуру, то посоветуйте, пожалуйста, что да как.

Добавлено через 16 часов 40 минут
Все еще актуально..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2013, 19:16
Ответы с готовыми решениями:

Подружить мышь и адаптер разных фирм
Здравствуйте.Есть такая проблема : имеются мышь smarttrack и адаптер от Logitech не Unifly.Так вот,...

Объекты каких потоков автоматически создаются при запуске программы
Здраствуйте, могу конечно немного переврать вопрос, но звучит примерно так: Объекты каких потоков...

Доступ к БД с разных потоков
как реализовать доступ к одной базе данных с разных потоков? когда один сервер обрабатывает...

Заполнение коллекции из разных потоков
Добрый день. Что я могу использовать вместо удобной ObservableCollection&lt;T&gt;, если мне надо...

1
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
11.10.2013, 19:44 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        private void btnLoad_OnClick(object sender, RoutedEventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                var img = new BitmapImage();
 
                using (var file = File.Open(@"X:\Penguins.jpg", FileMode.Open, FileAccess.Read))
                {
                    img.BeginInit();
                    img.CacheOption = BitmapCacheOption.OnLoad;
                    img.StreamSource = file;
                    img.EndInit();
                    img.Freeze();
                }
 
                Dispatcher.BeginInvoke((Action)(() =>
                {
                    ImgSource = img;
                }));
            });
        }
 
        private BitmapImage mImgSource;
        /// <summary>
        /// 
        /// </summary>
        public BitmapImage ImgSource
        {
            get { return mImgSource; }
            set
            {
                if (Equals(mImgSource, value))
                    return;
 
                mImgSource = value;
                OnPropertyChanged("ImgSource");
            }
        }
В XAML свойство Source у Image привязано к ImgSource;
1
11.10.2013, 19:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2013, 19:44
Помогаю со студенческими работами здесь

Доступ к стриму из разных потоков
Задача такая, имеем мемористрим, в одном потоке постоянно пишем его. В другом потоке необходимо по...

Обращение к массиву из разных потоков
Работа с потоками - материал объемный и я его осваиваю частями и по мере необходимости. Делегатами...

Доступ к потоку из разных потоков
private Handler Ocnova = new Handler(); private Object sync = new Object(); private potok2...

Работа из разных потоков с очередью
Здравствуйте. В общем, дела такие, есть у меня два потока и между ним некий &quot;буфер&quot;, коим служит...

Работа с QSerialPort из разных потоков
Задача такая. есть POS-принтер на COM порту. Необходимо иметь возможность передавать ему команды...

Доступ к очереди из разных потоков
Подскажите по многопоточности, у меня есть очередь (Queue) и мне надо организовать к ней доступ из...

Заполнение TreeView из разных потоков
Всем здравствуйте. Есть программа которая при запуске заполняет treeView. Почитал и получилось...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru