专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VC

VC.net 跨线程调用windows控件 ,是VC++, 不是VC#该如何处理

发布时间:2011-06-23 14:01:40 文章来源:www.iduyao.cn 采编人员:星星草
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);
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: