C#统治了.net, 所有的例子都是C#的。
跨线程调用windows控件也算是个常见的问题了,有成熟的代码和案例参考,然而,全部都是C#的代码。
当我改写成VC.net的时候,调试有报错,请帮忙看看如何修改?
代码如下:
public:delegate void DoWorkD(int N);
DoWorkD^ d;
//加载窗体时创建一个新线程
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
Thread^ demoThread= gcnew Thread(gcnew ThreadStart(this,&mt::Form1::ThreadProcSafe));
demoThread->Start();
}
//新线程
private: void ThreadProcSafe()
{
DoWorkD^ d=gcnew DoWorkD(DoWork);//调试时有两个错误指向这里!!!请帮忙修改
DoWork(1);
}
private: void DoWork(int Nums)
{
if (this->button1->InvokeRequired)
{
this->button1->Invoke(d, Nums);
}
else
{
this->button1->Text=L"Ddd";
}
}
调试时有两个错误:
error C3867: “mt::Form1::DoWork”: 函数调用缺少参数列表;请使用“&mt::Form1::DoWork”创建指向成员的指针
error C3350: “mt::Form1::DoWorkD”: 委托构造函数需要 2 个参数。
要如何修改才可以?
多线程 跨线程调用控件 Visual?C++
------解决方案--------------------
//新线程
private: void ThreadProcSafe()
{
DoWorkD^ d=gcnew DoWorkD(DoWork);//调试时有两个错误指向这里!!!请帮忙修改
DoWork(1);
}
=================================================================
改为
//新线程
private: void ThreadProcSafe()
{
d += gcnew DoWorkD(this, &Form1::DoWork);
}