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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к контролу формы из другого потока 
V
    Опции темы
asp1rant
Дата 30.3.2012, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пишу на C++.net

код в другом потоке (не в основном) вызывает событие
StepEvent(this, gcnew StepEventArgs(_step, _status));
на это событие подписан метод
imageAnalyzer->StepEvent += gcnew EventHandler<StepEventArgs^>(this, &Form1::AnalyzerEventHandler);
когда случается событие, вызывается 
Код

 private: System::Void AnalyzerEventHandler(System::Object^  sender, StepEventArgs^  e) 
{

                        listBox_log->Items->Add("Этап "+e->step+" состояние: "+e->status);
                 }

но не работает. пишет что нет доступа к элементам чужого потока. оно и понятно, я уже разобрался что так и должно быть. но вот только для c#. как для с++ так и не понял.
пробовал
Код

private: System::Void AnalyzerEventHandler(System::Object^  sender, StepEventArgs^  e) {
                      if (!this->InvokeRequired)
                      {
                          array<Object^>^ t = gcnew array<Object^>(2);
                          t[0] = sender;
                          t[1] = e;
                          this->Invoke(gcnew del(&Form1::AnalyzerEventHandler),t);
                      }
                      else
                        listBox_log->Items->Add("Этап "+e->step+" состояние: "+e->status);
                  }

так мне пишет 
Ошибка        error C3352: void VideoOnForm::Form1::AnalyzerEventHandler(System::Object ^,StepEventArgs ^): указанная функция не соответствует типу делегата "void (System::Object ^,StepEventArgs ^)".
буду очень благодраен подсказке)

Это сообщение отредактировал(а) asp1rant - 30.3.2012, 15:57
PM MAIL   Вверх
asp1rant
Дата 31.3.2012, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



убедительная просьба тем кто знает: подскажите! я знаю что этот вопрос уже по 100 раз обсуждался в инете, но про c#, а на этом чертовом c++.net нет анонимных функций, и не удается применять их подходы :(
PM MAIL   Вверх
Cheloveck
Дата 31.3.2012, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Зови Invoke не у this,  а у делегата.


--------------------
user posted image
PM Jabber   Вверх
asp1rant
Дата 31.3.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, я разобрался. у делегата invoke как я понял, делает протсо вызов ф-ии (мсдн не советует его вызывать) из того же потока.
рабочий код:
Код

         delegate void del(System::Object^  sender, StepEventArgs^  e);

         private: System::Void AnalyzerEventHandler(System::Object^  sender, StepEventArgs^  e) {
                      if (listBox_log->InvokeRequired)//здесь было неверное условие
                      {
                          array<Object^>^ t = gcnew array<Object^>(2);
                          del^ del1 = gcnew del(this/*нужно*/,&Form1::AnalyzerEventHandler);
                          t[0] = sender;
                          t[1] = e;
                          listBox_log->Invoke(del1, t);
                      }
                      else
                        listBox_log->Items->Add("Этап "+e->step+" состояние: "+e->status);
                  }

и еще добавить this.

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

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


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

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


 




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


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

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