如何通过Parallel::For调用Action<String^>?C2665错误求助
问题:Parallel::For调用Action<String^>委托编译报错C2665
我的代码
Action<String^> ^act = gcnew Action<String^>(this, &Form1::loadFileInternam); System::Threading::Tasks::Parallel::For(1, 16, act);
void loadFileInternam(String^ fn) { }
编译错误
Error: 严重性 代码 描述 项目 文件 行 抑制状态
Error C2665 'System::Threading::Tasks::Parallel::For': 8个重载中没有一个能转换所有参数类型
项目:dddd
文件:C:\Users\Jack\Desktop\repos\new_c++\Text editor - Copy\CppCLR_WinformsProject1 - Copy - Copy - Copy (2) - Copy (2)\Form1.h
行:1620
解决方法
编译报错的核心原因是参数类型不匹配:
Parallel::For的第三个参数需要接受int类型参数的委托(比如Action<int>),因为它的作用是遍历指定的索引范围(此处为左闭右开的1到15),每次迭代会传入当前的索引值。- 你定义的
Action<String^>委托接受字符串类型参数,和Parallel::For的要求完全不兼容。
根据需求,有两种可行的处理方案:
调整目标方法的参数类型
如果loadFileInternam可以通过索引生成目标文件名,直接修改方法参数为int,并同步调整委托类型:// 修改方法参数 void loadFileInternam(int index) { // 根据索引生成文件名,例如:String^ fn = "file_" + index + ".txt"; } // 调整委托类型 Action<int> ^act = gcnew Action<int>(this, &Form1::loadFileInternam); System::Threading::Tasks::Parallel::For(1, 16, act);改用Parallel::ForEach遍历字符串集合
如果你的目标是处理一组固定的字符串(比如多个文件名),应该使用Parallel::ForEach来遍历字符串集合,而非Parallel::For:// 准备需要处理的文件名集合 array<String^>^ files = gcnew array<String^>{"file1.txt", "file2.txt", ..., "file15.txt"}; Action<String^> ^act = gcnew Action<String^>(this, &Form1::loadFileInternam); System::Threading::Tasks::Parallel::ForEach(files, act);
内容的提问来源于stack exchange,提问作者teerayut d
相关产品推荐
相关产品推荐

