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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как организовать много поточность в WPF? 
:(
    Опции темы
Stas123
Дата 22.6.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как организовать много поточность в WPF?

Мое окно получеат данные, я их вывожу в окно,
при этом я хочу иметь возможность нажимать на кнопки.(данные я получаю постоянно)
Я сделал это так
Код

public True_BidAskWindow()
        {
            
            STROO = "qwerty";
            _portfolio = MainWindow._portfolio;
            InitializeComponent();
            //MessageBox.Show(_portfolio.ToString());
            GiveDDEData = new Thread(new ThreadStart(this.giveMeDDEData));
            GiveDDEData.Start();
        }
        
                
        protected override void OnClosing(CancelEventArgs e)
        {
            GiveDDEData.Abort();
            if (!this.RealClose)
            {
                base.Hide();
                e.Cancel = true;
            }

            base.OnClosing(e);
        }
        
        private void giveMeDDEData()
        {
            MID = 0m;
            /*while(true)
            {
                MID = _data.size;
            }*/
            //MessageBox.Show(mid.ToString());
        }


Но поток с данными занимет все время и не дает возможности что-либо делать.
PM MAIL   Вверх
jonie
Дата 22.6.2011, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вам надо в гуй выводить? 
вообще говоря вывод в гуй из другого потока это на мой взгляд очень медленная операция...

делается это так:
Код

  Dispatcher.Invoke(DispatcherPriority.Normal, 
                    new Action<string>(SetStatus), 
                    "From Other Thread");
....
void SetStatus(string some)
{
...now we on UI thread and can access to controls
}


медленность упирается в STA шность модели (оно еще куда не шло), и собственно в диспатчер...

можно попробывать как-нибуть тесты скорости в winforms и wpf


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


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



jonie правильно сказал. Если вы на каждой итерации цикла while(true) будете через диспатчер обновлять гуй, то этот самый гуй такими темпами будет всё время отставать (причем с течением времени всё больше и больше). Вы получайте данные как вам надо, а гуй обновляйте ну максимум раз в 0.1 секунды (делать интервал меньше просто нет смысла - пользователь не сможет отследить такие обновления). 
PM MAIL WWW Skype   Вверх
Stas123
Дата 24.6.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



jonie, а как ещё можно это сделать? Если не из другого потоки и при этом иметь возможность нажимать на кнопки?
PM MAIL   Вверх
jonie
Дата 24.6.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Stas123, по сути никак. ГУЙ это узкое горлышко, т.к. он STAшный.
Я вообще когда боюсь что не буду успевать что то обрабатывать, но надо показывать в гуй то делаю копию данных, которые и показываю в гуе.

типа (WT - рабочий поток, GT - GUI поток):
wt - обрабатывает данные, lock(память) { сохраняет копию их в памяти}
gt - lock (память) { выводим в гуй}

при этом lock это ReadWriteLock...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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