读书人

VC.net 跨线程调用windows控件 是VC

发布时间: 2013-09-29 11:07:08 作者: rapoo

VC.net 跨线程调用windows控件 ,是VC++, 不是VC#
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);
}

读书人网 >VC

热点推荐