【问题标题】:C++.net Delegate not working - compiler errorC++.net 委托不起作用 - 编译器错误
【发布时间】:2012-11-30 16:33:13
【问题描述】:

好吧,我从同一个类的静态函数创建了一个新线程。

在同一个类中,我尝试调用委托来更新 GUI。 我收到一个编译器错误提示:

委托初始化程序无效 - 除了函数之外还需要一个对象。 在 &MainUi::AddListItemMethod.

delegate void AddListItem(void);
    public: void AddListItemMethod(String^ myString)
    {
        ListView1->Items->Add(myString);
    }

private: static void SecondThread()
{  
AddListItem^ del = gcnew AddListItem(&MainUI::AddListItemMethod);
del->Invoke("test");
}

我不知道为什么它不起作用。我也试过这个,但仍然失败。有什么帮助吗?

Invoke(gcnew AddListItem(MainUI::&AddListItemMethod), "test");

【问题讨论】:

  • 方法必须是静态的才能像这样使用MainUI::AddListItemMethod.
  • 好的,但我需要该方法是非静态的,以便它可以访问 Listview1 控件。我该如何解决?
  • 要么必须使Listview1 静态才能工作,要么您应该创建MainUI 类的实例/对象以访问该类的非静态方法。
  • 我将列表视图设为静态并直接从第二个线程调用它。这似乎奏效了。非常感谢,谢谢!
  • 欢迎,现在我将其发布为答案,谢谢。

标签: multithreading visual-c++ delegates invoke


【解决方案1】:

您必须使Listview1 静态工作,或者您应该创建MainUI 类的实例/对象以访问该类的非静态方法。

谢谢你,祝你编码愉快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多