Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF and ThreadPool / 3 сообщений из 3, страница 1 из 1
27.01.2010, 18:46
    #36434524
Nikulin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF and ThreadPool
Привет Всем,

Подскажите пож-ста как из метода который будет исполняться в ThreadPool вызвать событие в WPF окне Window?

Вот метод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        public void ProcessDirectories(string[] directories)
        {
            try
            {
                foreach (var path in directories)
                {
                    string capId = ExtractCapId(path);

                    ProcessDirectory(capId, path);
                }

                if (OnDirectoriesProcessed != null) OnDirectoriesProcessed(this, new EventArgs());
            }
            catch (Exception ex)
            {
                if (OnDirectoriesProcessingException != null) OnDirectoriesProcessingException(this, ex);
            }
        }

Он будет отправлен в очередь ThreadPool:

Код: plaintext
ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(worker.ProcessDirectories), directories.Take(3).ToArray());


Вот обработчики событий:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        private void DirectoriesProcessingException(object self, Exception exc)
        {
            textBox1.Text = exc.ToString();
        }

        private void DirectoriesProcessed(object self, EventArgs e)
        {
            label1.Content = "Finished!";
        }

Сейчас вываливается exception:
The calling thread cannot access this object because a different thread owns it.

Как прикрутить Dispatcher?
...
Рейтинг: 0 / 0
27.01.2010, 19:11
    #36434576
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF and ThreadPool
NikulinПодскажите пож-ста как из метода который будет исполняться в ThreadPool вызвать событие в WPF окне Window?

http://wpfclient.blogspot.com/2010/01/synchronizationcontext.html
...
Рейтинг: 0 / 0
27.01.2010, 19:44
    #36434625
Nikulin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF and ThreadPool
Сделал так:

Код: plaintext
1.
2.
3.
        private void DirectoriesProcessingException(object self, Exception exc)
        {
            textBox1.Dispatcher.Invoke( (Action)delegate() {textBox1.Text = exc.ToString();}, null);
        }

вроде работает.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF and ThreadPool / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]