首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

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

2013-09-29 
VC.net 跨线程调用windows控件 ,是VC++, 不是VC#C#统治了.net, 所有的例子都是C#的。跨线程调用windows控件

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);
}

热点排行