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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов из неосновного потока события, которое обрабатывается в основном 
V
    Опции темы
ДобренькийПапаша
Дата 30.6.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Речь о WPF.

Код

 public partial class FirstLaunchWindow : Window
    {
        private event EventHandler<EventArgs> WindowOperationsEvent;

        Thread dbFillThread;
        public FirstLaunchWindow()
        {
            InitializeComponent();
            WindowOperationsEvent += new EventHandler<EventArgs>(OnWindowOperationsEvent);
            
            this.dbFillThread = new Thread(FillDb);
            dbFillThread.Start();
        }

        private void FillDb()
        {
            DbInfrastructure.FillPaymentDevicesByDefault();
            DbInfrastructure.FillSessionDataByDefault();
            DbInfrastructure.FillParametersByDefault();
            DbInfrastructure.FillNominalsByDefault();
            
            WindowOperationsEvent(null, new EventArgs());  //Если так вызываю событие, которое обрабатывается методом, создающим новое
                                                                                           //окно, то получаю Exception. Типа STA и всё такое.
        }

        private void OnWindowOperationsEvent(object sender, EventArgs e)
        {
            WindowsManagement.OpenWindow(new ServiceMainWindow());
            WindowsManagement.CloseWindow(this);
        }
}


Как из вторичного потока вызвать событие, обработчик которого находится в основном потоке и создаёт новое окно?

Это сообщение отредактировал(а) ДобренькийПапаша - 30.6.2011, 10:29


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
ДобренькийПапаша
Дата 30.6.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Так решилось. В общем, теперь я всегда, когда что-то с формой надо сделать буду про Dispatcher вспоминать smile
Код

Thread dbFillThread;

        public FirstLaunchWindow()
        {
            InitializeComponent();
            
            this.dbFillThread = new Thread(FillDb);
            dbFillThread.Start();
        }

        private void FillDb()
        {
            DbInfrastructure.FillPaymentDevicesByDefault();
            DbInfrastructure.FillSessionDataByDefault();
            DbInfrastructure.FillParametersByDefault();
            DbInfrastructure.FillNominalsByDefault();

            Dispatcher.Invoke(new Action(OnWindowOperationsEvent), DispatcherPriority.Normal);
        }

        private void OnWindowOperationsEvent()
        {            
            WindowsManagement.OpenWindow(new ServiceMainWindow());
            WindowsManagement.CloseWindow(this);            
        }


Это сообщение отредактировал(а) ДобренькийПапаша - 30.6.2011, 10:56


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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