我正在编写一个带线程的示例程序。我在CamThread.h中有一个名为CamThread的类,如下所示:
public ref class CamThread{
public:
CamThread();
void takeImages();
private:
Driver^ driver;
};
CamThread.cpp文件如下所示:
using namespace System::Threading;
CamThread::CamThread(){
Driver^ newdriver;
newdriver = (Driver^)gcnew ZylaDriver();
newdriver->initCamera();
Thread^ acquireThread = gcnew Thread(gcnew ParameterizedThreadStart(this,&CamThread::takeImages));
acquireThread->Start;
};
void CamThread::takeImages(){
//Additional code.}
主要功能是
int main(int argc,char * argv []) {
CamThread^ cameraThread = gcnew CamThread();
cout << endl << "Press enter to close" << endl;
cin.ignore();
return 0;
}
我遇到的问题是在CamThread.cpp中,Visual Studio 2013在ParameterizedThreadStart中遇到了&amp; CamThread :: takeImages的问题。它给了我&#34;错误:无效的委托初始化程序 - 函数与委托类型不匹配&#34;。
我似乎错误地构建了委托&amp; CamThread :: takeImages,但我发现的许多示例似乎都使用了类似的结构(例如https://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart%28v=vs.110%29.aspx)。
我一直无法找到其他好的例子。
答案 0 :(得分:3)
ParameterizedThreadStart类要求委托有一个参数。 所以takeImages方法应该声明为:
void takeImages(Object^obj)
因此,当您想要启动该线程时,您需要传递一个参数:
acquireThread->Start(someParameter);
但是如果你不需要传递参数,那么只需保留方法takeImages,然后使用ThreadStart而不是ParameterizedThreadStart创建线程:
Thread^ acquireThread = gcnew Thread(gcnew ThreadStart(this, &CamThread::takeImages));
并以:
开头acquireThread->Start();
答案 1 :(得分:-3)
dt->ColumnChanging += gcnew DataColumnChangeEventHandler(this, Project1::MyForm::ppp);
然后
private: void ppp(System::Object^ sender, System::Data::DataColumnChangeEventArgs^ e)
{
}
与DataColumnChangeEventArgs相匹配 DataColumnChangeEventHandler。