Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
Flexo
9 / 8 / 5
Регистрация: 26.02.2011
Сообщений: 150
1

Потоки. STA

06.06.2011, 15:23. Просмотров 3173. Ответов 8
Метки нет (Все метки)

Пишу клиент-серверное приложение. В клиенте есть целый класс для работы с сервером (получает команды, обрабатывает, отвечает на них и т.д.). Так вот при получении одной команды с сервера нужно чтобы в клиенте открылось окно с сообщением.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public void Commandor(string command)
        {
            switch (command)
            {
                case "access_true":
                    try
                    {
                        Window1 Message = new Window1(); //здесь исключение
                        Message.title.Content = "Авторизация упешна";
                        Message.ShowDialog();
                    }
                    catch (Exception e) { MessageBox.Show(e.Message); }
                    break;
            }
        }
При попытке создать это окно программа просто закрывается, никаких ошибок не выводит (это если не использовать try/catch). Сейчас в мессаг боксе выдает сообщение об ошибке (скриншот ниже).
Подскажите как наладить работу?
0
Миниатюры
Потоки. STA  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2011, 15:23
Ответы с готовыми решениями:

MessageBox, модальность и STA
Проект создан в VS 2013. По таймеру обрабатываю обращение к виртуальному...

Тестирование WPF UserControl: Вызывающим потоком должен быть STA
Создал элемент управления и сейчас стоит задача его протестировать. Но после...

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
пишет:Текущий поток должен быть задан как поток однопоточного контейнера (STA),...

Потоки
Как вот такой цикл засунуть в поток? string lines = this.richTextBox1.Lines;...

Потоки
Как сделать поток ,чтобы он следил за постоянным обновлением текста в...

8
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
06.06.2011, 16:19 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public void Commandor(string command)
        {
            switch (command)
            {
                case "access_true":
                    try
                    {
                        Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                {
                        Window1 Message = new Window1(); //здесь исключение
                        Message.title.Content = "Авторизация упешна";
                        Message.ShowDialog();
                }));
                    }
                    catch (Exception e) { MessageBox.Show(e.Message); }
                    break;
            }
        }
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
07.06.2011, 10:07 3
C#
1
2
3
 
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
1
G.E.C.K
Vault dweller
85 / 85 / 5
Регистрация: 05.03.2011
Сообщений: 327
08.06.2011, 04:16 4
Проблема в том, что только определенный поток может рисовать в UI.
Как показано выше, можно свой поток сделать STA, а можно через Dispatcher дать задание потоку отрисовать UI.
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
14.06.2011, 16:16 5
А сколько таких потоков STA ( которые могут рисовать UI) может быть? Один или больше?
0
G.E.C.K
Vault dweller
85 / 85 / 5
Регистрация: 05.03.2011
Сообщений: 327
14.06.2011, 16:37 6
Цитата Сообщение от SkarM Посмотреть сообщение
А сколько таких потоков STA ( которые могут рисовать UI) может быть? Один или больше?
http://msdn.microsoft.com/ru-ru/libr...mentstate.aspx
тут подробнее об STA

Добавлено через 18 минут
http://wladm.narod.ru/C_Sharp/backgroundwork.html
1
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
14.06.2011, 17:00 7
Но все таки, можно реализовать параллельную работу с двумя или более компонентами интерфейса? Например, добавлять в ту же стек пенел элементы, и чтоб пользователь имел доступ к остальным элементом интерфейса(на панельку добавляются картинки, и можно в то же время на соседней панельке прокручивать, или там что-то еще делать с другими картинками. как вообще возможно такое организовать?).
0
G.E.C.K
Vault dweller
85 / 85 / 5
Регистрация: 05.03.2011
Сообщений: 327
14.06.2011, 17:33 8
Через Dispatcher добавлять в фоне картинки, и апдейтить панель, а юзер тем временем сможет ее просматривать.
0
SkarM
7 / 7 / 3
Регистрация: 28.10.2010
Сообщений: 220
14.06.2011, 17:44 9
А поподробне как? я через диспатчер добавляю картинки, но на время добавления их, тормозиться основной поток. А на счет обновления панели впервые слышу. Это как? Может лутьше в аське объясните? 363649696
0
14.06.2011, 17:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 17:44

Потоки
Люди, у меня большая проблема... Мне нужно на свою форму добавить две...

Потоки в C#
Пишу сканер сети и Ping у меня выполняется в отдельном потоке В это потоке я...

Потоки в WPF
Всем привет. У меня возникла такая проблема. Пишу на WPF мини игру: сверху вниз...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru