gpt4 book ai didi

.net - 如何在 C++ 中使用 MethodInvoker?

转载 作者:行者123 更新时间:2023-12-02 13:35:41 25 4
gpt4 key购买 nike

我有一个具有后台线程的 C++/CLI 应用程序。我经常希望它把结果发布到主 GUI 上。我读过elsewhere on SO MethodInvoker 可以用于此目的,但我正在努力将语法从 C# 转换为 C++:

    void UpdateProcessorTemperatures(array<float>^ temperatures)
{
MethodInvoker^ action = delegate
{
const int numOfTemps = temperatures->Length;
if( numOfTemps > 0 ) { m_txtProcessor2Temperature->Text = temperatures[0]; } else { m_txtProcessor2Temperature->Text = "N/A"; }
if( numOfTemps > 1 ) { m_txtProcessor2Temperature->Text = temperatures[1]; } else { m_txtProcessor2Temperature->Text = "N/A"; }
if( numOfTemps > 2 ) { m_txtProcessor2Temperature->Text = temperatures[2]; } else { m_txtProcessor2Temperature->Text = "N/A"; }
if( numOfTemps > 3 ) { m_txtProcessor2Temperature->Text = temperatures[3]; } else { m_txtProcessor2Temperature->Text = "N/A"; }
}
this->BeginInvoke(action);
}

...给我:

1>c:\projects\MyTemperatureReporter\Form1.h(217) : error C2065: 'delegate' : undeclared identifier
1>c:\projects\MyTemperatureReporter\Form1.h(217) : error C2143: syntax error : missing ';' before '{'

我在这里缺少什么?

最佳答案

C++/CLI 不支持匿名委托(delegate),这是 C# 独有的功能。您需要在类的单独方法中编写委托(delegate)目标方法。您还需要声明委托(delegate)类型,MethodInvoker 无法完成这项工作。让它看起来像这样:

    delegate void UpdateTemperaturesDelegate(array<float>^ temperatures);

void UpdateProcessorTemperatures(array<float>^ temperatures)
{
UpdateTemperaturesDelegate^ action = gcnew UpdateTemperaturesDelegate(this, &Form1::Worker);
this->BeginInvoke(action, temperatures);
}

void Worker(array<float>^ temperatures)
{
const int numOfTemps = temperatures->Length;
// etc..
}

关于.net - 如何在 C++ 中使用 MethodInvoker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com