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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с BeginInvoke (C++), помогите, уже который час стою на месте( 
V
    Опции темы
beyond11
Дата 17.5.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

private: __delegate void VivodOnlineHandler();
private: void VivodOnline()
        {
            if (this->InvokeRequired)
            {
                this->BeginInvoke(new VivodOnlineHandler, ?????????????????????????);
            }

            System::Windows::Forms::TreeNode* nod[] = new System::Windows::Forms::TreeNode*[3];
            nod[0] = new System::Windows::Forms::TreeNode(S"name1");
            nod[1] = new System::Windows::Forms::TreeNode(S"name2");
            nod[2] = new System::Windows::Forms::TreeNode(S"name3");
            treeView1->Nodes->AddRange(nod);
        }


Язык - С++ (Visual Studio 2003)
Помогите пожалуйста - что написать вместо вопросительных знаков, чтобы заработало??? 
Написано, типа System::Object__gc* __gc[]

Нубский вопрос наверно, но всё же, вообще не пойму, как туда что-то правильно вписать ((

Это сообщение отредактировал(а) beyond11 - 17.5.2009, 18:34
PM MAIL   Вверх
beyond11
Дата 17.5.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

    private: __delegate void VivodOnlineHandler();
    private: void VivodOnline()
        {
             Object __gc* temp1 __gc[];
            if (this->InvokeRequired)
            {
                this->BeginInvoke(new VivodOnlineHandler, new temp1 {} );
            }
            System::Windows::Forms::TreeNode* nod[] = new System::Windows::Forms::TreeNode*[3];
            nod[0] = new System::Windows::Forms::TreeNode(S"name1");
            nod[1] = new System::Windows::Forms::TreeNode(S"name2");
            nod[2] = new System::Windows::Forms::TreeNode(S"name3");
            treeView1->Nodes->AddRange(nod);
        }


Если пишу так, вылазит какая-то странная ошибка:

 error C2958: the left parenthesis '(' found at 'c:\documents and settings\

Помогите ((((

Это сообщение отредактировал(а) beyond11 - 18.5.2009, 10:04
PM MAIL   Вверх
beyond11
Дата 17.5.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну блин народ (( неужели никто не знает ((
PM MAIL   Вверх
Partizan
Дата 17.5.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



beyond11, конструктор делегата принимает метод


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
beyond11
Дата 18.5.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь. Извиняюсь. Не могли бы вы привести пример (или, может, исправить этот код), как именно правильно мне туда написать? Я в этих понятиях (конструкторы-деструкторы-методы-делегаты-и-много-других-страшных-слов) очень сильно путаюсь. Иными словами, я ничё не понял  smile 
В теории не силён (
PM MAIL   Вверх
Partizan
Дата 18.5.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



beyond11, вот пример из MSDN:


Код

private:
   delegate void MyDelegate(
   Label^ myControl, String^ myArg2 );
   void Button_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      array<Object^>^myArray = gcnew array<Object^>(2);
      myArray[ 0 ] = gcnew Label;
      myArray[ 1 ] = "Enter a Value";
      myTextBox->BeginInvoke( gcnew MyDelegate( this, &MyForm::DelegateMethod ), myArray );
   }

   void DelegateMethod( Label^ myControl, String^ myCaption )
   {
      myControl->Location = Point(16,16);
      myControl->Size = System::Drawing::Size( 80, 25 );
      myControl->Text = myCaption;
      this->Controls->Add( myControl );
   }

   delegate void InvokeDelegate();


Это сообщение отредактировал(а) Partizan - 18.5.2009, 12:34


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
beyond11
Дата 19.5.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите! Изменил немного текст, скомпилировать получилось!
Код

String* text11;
    private: __delegate void VivodOnlineHandler();
    private: void VivodOnline()
        {
            Object* temp0 [] = {text11};
            if (this->InvokeRequired)
                this->Invoke(new VivodOnlineHandler(this,&Form1::Vivod1),temp0);
            else Vivod1();
        }

    private: void Vivod1()
             {
                System::Windows::Forms::TreeNode* nod[] = new System::Windows::Forms::TreeNode*[1];
                nod[0] = new System::Windows::Forms::TreeNode(S"name1");
                nod[1] = new System::Windows::Forms::TreeNode(S"name2");
                nod[2] = new System::Windows::Forms::TreeNode(S"name3");
                treeView1->Nodes->AddRange(nod);
             }


Но при выполнении этого текста вылазит ошибка:

An unhandled exception of type 'System.Reflection.TargetParameterCountException' occurred in system.windows.forms.dll

Additional information: Parameter count mismatch.


После ошибки программа работает нормально, но в treeView1 ничего не меняется(((
Что делать??? Где неправильно я написал??
Ничерта в этих Invoke не пойму, хотя кучу примеров пересмотрел...

Это сообщение отредактировал(а) beyond11 - 19.5.2009, 20:49
PM MAIL   Вверх
Partizan
Дата 19.5.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



beyond11, у вас делегат описывает метод, который не принимает параметров....в то же время при Invoke, Вы передаёте параметр temp0...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
beyond11
Дата 19.5.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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