210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
1

Dispatcher.Invoke и delegate invoke, исправить ошибки в коде

10.01.2012, 13:48. Показов 2217. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет не пойму почему второй код не работает?
C#
1
2
3
4
5
6
7
8
9
10
11
12
 void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            NextDel nd = new NextDel(Myshow);
            Dispatcher.Invoke(nd);
        }
 
public delegate void NextDel();
 
        public void Myshow()
        {
            textBlock1.Text += textBox1.Text + "Comp! ";
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
 void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            NextDel nd = new NextDel(Myshow);
            nd();  // тут же выполняется nd.Invoke(); который указывает на Myshow
        }
 
public delegate void NextDel();
 
        public void Myshow()
        {
            textBlock1.Text += textBox1.Text + "Comp! ";
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2012, 13:48
Ответы с готовыми решениями:

Dispatcher.Invoke() не вызывает указанный делегат
Метод MethodForThread() работает в другом потоке и по окончании он должен вызвать обратный метод...

Invoke
Не очень хорошо разбираюсь в этом, поэтому спрашиваю. Есть программа на WinForms. В MainForm есть...

Invoke и новый поток
Пытаюсь запустить поток, в котором будут изменяться свойства listview. Но судя по зависаниям...

Invoke из главного потока во второй
озникла такая задача. Есть компонент, созданный в отдельном потоке(плеер). При обращении к нему из...

4
Эксперт .NET
17203 / 12657 / 3321
Регистрация: 17.09.2011
Сообщений: 20,932
10.01.2012, 15:16 2
Потому что во втором варианте вы пытаетесь изменить свойство контрола в дочернем потоке, что приводит к выбросу исключения как в WinForms, так и в WPF.
1
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
10.01.2012, 15:30  [ТС] 3
так в первом случае я тоже изменяю в дочернем и всё ок
0
Эксперт .NET
17203 / 12657 / 3321
Регистрация: 17.09.2011
Сообщений: 20,932
10.01.2012, 15:44 4
В первом случае вы перенаправляете выполнение метода Myshow в основной поток через класс Dispatcher, а во втором просто вызываете делегат, сиречь ссылку на метод.
1
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
10.01.2012, 16:12  [ТС] 5
спс разобрался
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2012, 16:12
Помогаю со студенческими работами здесь

Последовательность выполнения Invoke- делегатов
Привет! У меня такой непростой вопрос. Предположим есть 4 рабочих потока и 1 основной, в котором...

Перестала работать конструкция Invoke(new Action()
есть такая конструкция внутри вызываемого For(). Работало, текст появлялся. Потом код сильно...

Автоматический invoke, есть ли он и реально ли это
Собственно вопрос по Сабжу, есть ли готовые решения? А то приходится писать много "лишнего кода"...

Почему делегат не вызывает метод без Invoke
Есть такой код public delegate bool IsPlaying(); private readonly IsPlaying...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru