【问题标题】:winforms - c++ - invoke methodwinforms - c++ - 调用方法
【发布时间】:2020-09-29 07:49:36
【问题描述】:

我正在尝试实现从另一个线程更新文本框的调用方法。

为此,我按照互联网上的一些说明/教程进行操作,但没有成功:

这是我的主窗体初始化的地方,称为 MyForm.cpp:

Calc::MyForm::MyForm(){

InitializeComponent();

System::Threading::Thread ^plsInvoke = gcnew Thread(this, &Calc::initatePls);
//Thread = thread
plsInvoke->Start();
}

我要线程化的函数位于 pls.cpp 中,名为 initatePls。

void Calc::initatePls()

{
hCommPLS = connectCom(6, 115200);   
sendPls();
}

我收到的错误:

严重性代码描述项目文件行抑制状态 错误 C2664 'System::Threading::Thread::Thread(const System::Threading::Thread %)':无法将参数 1 从 'void (__cdecl )(void)' 转换为 'System::Threading: :ThreadStart ^' Calc C:\Users\david\OneDrive******\Calc\MyForm.cpp 111

正如我所说,目标是使用位于 pls.cpp 中的全局变量更新文本框。

谢谢。

【问题讨论】:

    标签: c++ winforms visual-studio-2019 invoke


    【解决方案1】:

    确保包含namespace Systemnamespace System::Threading,或者每次都写入整个命名空间System::Threading::Thread

    您还可以在您的gcnew Thread 中创建一个gcnew ThreadStart 以立即启动线程,以便您可以删除threadName->Start();

    示例:

    using namespace System;
    using namespace System::Threading;
    
    void exampleFunction() {
        Thread^ thread1 = gcnew Thread(gcnew ThreadStart(this, &Calc::initatePls));
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多