使用VC++ 2010.如何从另一个线程访问窗体控件?
我想从另一个线程中的类访问窗体的控件..并不能找出最好的(或任何)方法来做到这一点。我如何传递我的表单实例的引用?我使用createthread()而不是托管版本,希望使我的应用程序与XP兼容。
我试过通过lPaParameter在结构中传递引用和其他值,但我似乎无法弄清楚如何正确地声明引用。
ref class SZClass {
private:
FMain ^bound_form;
int server_port;
public:
void BindForm(FMain ^bf);
void Initialize(int sp)
}
struct param_data {
public:
FMain ^form_tobind;
int port_num;
}
是给我的错误:
error C2143: syntax error : missing ';' before '^'
FMain是我的表单类的名字,我有一个委托方法已经建立,使其多线程安全:
public:
FMain(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
void FMain::PrintConsole(std::string mzg) {
String ^Smzg = marshal_as<String^>(mzg);
if (this->textBox1->InvokeRequired) {
SetTextDelegate^ d = gcnew SetTextDelegate(this, &FMain::PrintConsole);
this->Invoke(d, gcnew array<Object^> { Smzg });
} else {
textBox1->Text += Smzg;
textBox1->SelectionStart = textBox1->TextLength;
}
}
我如何声明对我的表单的引用? 或者有没有更容易或更好的方法来做到这一点?
这只是典型的Smzg问题,在标题之间有循环依赖关系。 FMain类需要了解SZClass和SZClass需要了解有关FMain的知识。你必须在向前声明和拆分声明和定义.h和.cpp文件之间进行C++舞蹈。你需要有人来检查你的代码btw,问一个团队成员或朋友。 –
我有一个.h和.cpp类,是不够的?我必须为我的表格课程做同样的事吗?并在哪些我会包括哪些? – Willdorf
当我列出三件事情,并且你做了两件事情是不够的。谷歌“C++前向声明”,首先命中是好的。当你不熟悉C++语言时,用C#编写它。 –