【发布时间】: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