Як додати Event tick в System :: windows :: Forms :: Таймер у некерованому класі

Я намагаюся це зробити, як я знайшов у деякому прикладі:

TimerID = gcnew System::Windows::Forms::Timer(); 
TimerID->Tick += gcnew System::EventHandler(this, &Bridge::timer1_Tick);

і

System::Void Bridge::timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
{
    Bridge::DoUpdate();
}

Але неможливо створити обробник подій через помилку:

помилка C3364: 'System :: EventHandler': недійсний аргумент для делегата   конструктор; Цільова делегата повинна бути вказівником на члена   функція

Міст - некерований клас. Тому я оголошую Таймер ІД таким чином:

gcroot TimerID;

Що тут я роблю? Як правильно додати Tick Event?

1
Чому б ти це робити? Просто використовуйте керований тип, якщо ви використовуєте керований таймер.
додано Автор ildjarn, джерело

1 Відповіді

Ви не розмістили достатньо коду, щоб діагностувати помилку. Це компілює:

public ref class Bridge : public System::Windows::Forms::Form
{
    Timer^ TimerID;
public:
    Bridge(void) {
        InitializeComponent();
        TimerID = gcnew System::Windows::Forms::Timer(); 
        TimerID->Tick += gcnew System::EventHandler(this, &Bridge::timer1_Tick);        
    }
private:
    void Bridge::timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
    }
    void InitializeComponent(void) {
       //etc...
    }
};
1
додано
повинен бути, Bridge є некерованим класом, і я використовую gcroot для таймера
додано Автор Cynede, джерело
Ви маєте на увазі мою System :: Void Bridge :: timer1_Tick (System :: Object ^ sender, System :: EventArgs ^ e) також некерована і не може бути викликана? Чи повинен я зробити його грізним?
додано Автор Cynede, джерело
Ну це пояснює це. Як вам вдалося скомпілювати нативний метод прийому керованих об'єктів - це трохи таємниче. Вам потрібно використовувати Marshal :: GetDelegateForFunctionPointer (), щоб отримати об'єкт делегату, який націлений на нативну функцію. Цільова функція повинна бути статичною, вона не може бути методом екземпляра класу. Або просто встановіть таймер, щоб викликати керований метод, який, у свою чергу, називає нативний метод.
додано Автор Hans Passant, джерело
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147