.net 如何通过Parallel::For调用Action< String^>

ny6fqffe  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(109)

我想通过Parallel::For调用Action<String^,但得到下面的错误。
我的代码:

Action<String^> ^act =    gcnew Action<String^>(this, &Form1::loadFileInternam);

System::Threading::Tasks::Parallel::For(1, 16, act);

个字符
我得到的错误:
错误代码:严重性代码描述项目文件行抑制状态错误C2665“系统::线程::任务::并行::For”:8个重载中没有一个可以转换所有参数类型dddd C:\Users\Jack\Desktop\repos\new_c++\Text editor - Copy\CppCLR_WinformsProject1 - Copy - Copy - Copy(2)- Copy(2)\Form1.h 1620

e5nqia27

e5nqia271#

  • 问题:*

正如你所看到的here,根据重载列表,Parallel::For支持几种类型的Action,但是它们都不接受String参数。

解决方案:

由于没有提供任何上下文,因此不清楚当Parallel::For调用loadFileInternam时,String实际上是什么。
但可能适合您需要的Action类型是:Action<Int32>
这个Action将从您传递给Parallel::For的范围中传递一个Int32,即1..16不包括)。
您可以使用此索引来选择要传递给loadFileInternam的相关字符串。

类似于:

ref class Form1
{
    // The actual method you need to invoke:
    void loadFileInternam(String ^ fn)
    {
    }

    // The Action used by Parallel::For (will be called for [1,16) in this case):
    void loadFileInternamHelper(Int32 idx)
    {
        String^ s = "aaa";  // determine s according to idx
        loadFileInternam(s);
    }

    void Run()
    {
        Action<Int32>^ act = gcnew Action<Int32>(this, &Form1::loadFileInternamHelper);
        System::Threading::Tasks::Parallel::For(1, 16, act);
    }
};

字符串

相关问题