在winforms C#应用程序中如何在for循环内部并行执行所有进程

在winforms C#应用程序中如何在for循环内部并行执行所有进程,c#,multithreading,winforms,asynchronous,C#,Multithreading,Winforms,Asynchronous,我已经创建了一个函数,该函数将单个精细文件拆分为多个文件。例如,我有一个包含100页的文件,现在我想为每15页创建一个新文件,这意味着它将创建7个文件,每个文件有15页。(100/15=7) 现在我的问题是,我已经使用线程、ISynchronizeInvoke和委托实现了分割文件的逻辑,以平滑流程和用户体验。它是工作的方面,但我想并行或同时执行每个分割,而不是一个接一个的过程 此代码已写入Splitter.cs文件中 我编写了以下代码: #区域专用变量 私有NotifyProgress\u no

我已经创建了一个函数,该函数将单个精细文件拆分为多个文件。例如,我有一个包含100页的文件,现在我想为每15页创建一个新文件,这意味着它将创建7个文件,每个文件有15页。(100/15=7)

现在我的问题是,我已经使用线程ISynchronizeInvoke委托实现了分割文件的逻辑,以平滑流程和用户体验。它是工作的方面,但我想并行或同时执行每个分割,而不是一个接一个的过程

此代码已写入Splitter.cs文件中 我编写了以下代码:

#区域专用变量
私有NotifyProgress\u notifyDelegate;
私有线程(u线程),;
私有ISynchronizeInvoke\u同步对象;
//这是进度委托的定义-它定义了例程的“签名”。。。
public delegate void NotifyProgress(inttotalfiles、intprocessfileindex、inttotalpages、intpageindex、字符串大小);
#端区
私有void splitFiles()
{
//使用源Pdf文件的内容初始化新的PdfReader实例:
PDF阅读器=新的PDF阅读器(PDFFile);
Reader.RemoveUnusedObjects();
Reader.consolidateNameDestinations();
对于(int f=0;f
此代码已在Form.cs文件中编写

private void DelegateProgress(inttotalfiles、intprocessfileindex、inttotalpages、intpageindex、字符串大小)
{
if(拆分器!=null&&PDFSplitter.TotalPages>0)
{
此.Invoke((MethodInvoker)委托
{
int IndividualProgress=PageIndex*100/总页数;
lstFiles.Items[ProcessFileIndex-1]。子项[1]。文本=大小;
TextProgressBar pb=(TextProgressBar)lstFiles.GetEmbeddedControl(3,ProcessFileIndex-1);
pb.Text=string.Format(“{0:00}%”,IndividualProgress);
pb.价值=个人进步;
int-OverallProgress=ProcessFileIndex*100/TotalFiles;
ProgressStripItem statusProgrss=(ProgressStripItem)tsStatus.Items[3];
statusProgrss.TextProgressBar.Value=总体进度;
statusProgrss.TextProgressBar.Text=string.Format(“{0:00}%”,总进度);
如果(总体进度>=100和个人进度>=100)
{
tslblMessage.Text=“文件已成功拆分。”;
DialogResult dr=MessageBox.Show(tslblMessage.Text+“\n是否打开拆分文件文件夹?”,“拆分完成”,MessageBoxButtons.YesNo,MessageBoxIcon.Information);
如果(dr==System.Windows.Forms.DialogResult.Yes)
{
OpenSplitFilePath();
}
对于(int i=0;i
我希望这可以通过并行方式实现。请参阅以下链接,了解如何为每个应用程序使用并行

你试过了吗?这里有一个简单的例子

Parallel.For(0, 10, i => 
{
    //What you would like to do simultaneously.
    System.Diagnostics.Debug.WriteLine(i);
});
如果您运行try building并编译这个简单的代码,您会注意到输出将是这样的

8
4
5
7
2
3
9
1
6

我尝试过使用线程实现,但无法得到并行进程的结果!你能告诉我哪里错了吗。感谢您使用的是哪一版本的.net framework?如果您将它们全部读/写到同一个硬盘驱动器上,那么并行路径很可能比按顺序处理它们慢得多……我使用的是.net framework 4.0