我必须处理10个二进制文件,每个文件大于100MB。 我使用BinaryReader编写了一个单线程程序,并且运行良好。 我想通过使用
使其并行Parallel.For(0,10, i=>
{
-------------
BinaryReader BR = new BinaryReader(File.Open(Files[i], FileMode.Open));
While (BR.BaseStream.Position < BR.BaseStream.Length)
{
Uint64 a = BR.ReadUInt64();
ProgressBar[i].Value = Convert.ToInt32( 10* BR.BaseStream.Position / BR.BaseStream.Length); //error
}
-------------
} );
更新进度条(由UI线程拥有)是问题所在 每个线程都有自己的进度条控件实例,但是它们无法触及它。
答案 0 :(得分:0)
您无法从主UI线程之外的其他线程访问表单上的控件元素。你需要调用&#39;完成这项工作的功能。从UI线程&#39; 以外的地方搜索&#39;更新控件。
另外,我建议使用BackgroundWorkers,因为它们是一个专用函数,用于向控制表单的主UI线程报告进度:
https://msdn.microsoft.com/de-de/library/a3zbdb1t(v=vs.110).aspx
您传递给此功能的数据取决于您。
但是还有一件事需要考虑:你是从硬盘驱动器读取10倍100MB吗?如果是,那么你应该保持操作顺序!!否则硬盘将成为瓶颈并将其全部降低而不是加速,因为读/写头在文件之间跳转时的定位时间。 从RAM(RAM磁盘)或SSD读取文件时,此问题不存在。