.net 如何在C++;?

.net 如何在C++;?,.net,user-interface,c++-cli,backgroundworker,porting,.net,User Interface,C++ Cli,Backgroundworker,Porting,我有一个C++/CLI应用程序,它有一个后台线程。我经常希望它将结果发布到主GUI。我读过MethodInvoker可以实现这一点,但我正在努力将语法从C#转换为C++: 我这里缺少什么?C++/CLI不支持匿名委托,这是C#独有的功能。您需要在类的单独方法中编写委托目标方法。您还需要声明委托类型,MethodInvoker无法执行此任务。让它看起来像这样: delegate void UpdateTemperaturesDelegate(array<float>^ temp

我有一个C++/CLI应用程序,它有一个后台线程。我经常希望它将结果发布到主GUI。我读过MethodInvoker可以实现这一点,但我正在努力将语法从C#转换为C++:


我这里缺少什么?

C++/CLI不支持匿名委托,这是C#独有的功能。您需要在类的单独方法中编写委托目标方法。您还需要声明委托类型,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..
    }
delegate void UpdateTemperaturesDelegate(数组^temperatures);
void UpdateProcessorTemperatures(数组^temperatures)
{
UpdateTemperaturesDelegate^action=gcnew UpdateTemperaturesDelegate(this,&Form1::Worker);
这->开始振动(动作、温度);
}
无效工作程序(数组^T)
{
常量int numOfTemps=温度->长度;
//等等。。
}

他调用的不是代理的
BeginInvoke
方法,而是表单的
BeginInvoke
方法。这正是正确的做法。此外,匿名委托不受支持的原因是lambdas的语法正在标准化。我希望第一个版本VisualC++在C++ 0x标准发布之后被接受,以添加匿名代理的支持,使用lambdas和闭包的C++ 0x语法。
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 '{'
    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..
    }