问题描述
我正在尝试实现用于从另一个线程更新文本框的invoke方法。
为此,我遵循了互联网上的一些说明/教程,但没有成功:
这是我的主窗体初始化的地方,称为MyForm.cpp:
Calc::MyForm::MyForm(){
InitializeComponent();
System::Threading::Thread ^plsInvoke = gcnew Thread(this,&Calc::initatePls);
//Thread = thread
plsInvoke->Start();
}
我要线程化的函数位于pls.cpp中,称为initatePls。
void Calc::initatePls()
{
hCommPLS = connectCom(6,115200);
sendPls();
}
我收到的错误:
严重性代码描述项目文件行抑制状态 错误C2664'System :: Threading :: Thread :: Thread(const System :: Threading :: Thread%)':无法将参数1从'void(__cdecl )(void)'转换为'System :: Threading: :ThreadStart ^'Calc C:\ Users \ david \ OneDrive * ***** \ Calc \ MyForm.cpp 111
目标,如我所说,使用位于pls.cpp中的全局变量来更新文本框。
谢谢。
解决方法
确保包括namespace System
和namespace System::Threading
,或者每次System::Threading::Thread
都写整个命名空间。
您还可以在gcnew ThreadStart
中创建一个gcnew Thread
以立即启动线程,以便删除threadName->Start();
示例:
using namespace System;
using namespace System::Threading;
void exampleFunction() {
Thread^ thread1 = gcnew Thread(gcnew ThreadStart(this,&Calc::initatePls));
}