有button1,当点击时,文件的并行处理应该开始。编码:
private async void button1_ClickAsync(object sender, EventArgs e)
{
for (int i = 0; i < paths.Count; i++)
{
await Processing(paths[i]);
}
}
方法本身:
public async Task Processing(string path)
{
byte[] newFile; //Переменная для записи нового файла
using (FileStream f = File.OpenRead(path))
{
byte[] openFile = new byte[f.Length];
await f.ReadAsync(openFile, 0, openFile.Length);
//Обработка файла, в ней же и записываются значения в newFile
}
File.Delete(path); //Можно вместо этого изменить FileMode в следующей строке, но пока что не до этого
using (FileStream f = new FileStream(path, FileMode.Create))
{
await f.WriteAsync(newFile, 0, newFile.Length);
}
processed++;
label10.Text = "Обработано файлов: " + processed;
}
处理多个文件并保存空文件。感觉文件没有被正确读取或被错误地写入。我是在并行执行方法还是在方法本身的异步中执行这些方法是错误的吗?谢谢你。
首先,正如错误中指出的那样,您正在将文件读入数组
openFile并写入数组newFile并且它是空的。其次,这里也是一样的,只是代码更短。与删除数据在单独的线程中处理,以免挂起应用程序。假设数据处理需要很长时间。假设正在写入的文件中的字节数与读取文件中的字节数相同。
第三,文件是按顺序处理的,一个接一个。可以并行执行,但只有在读取和写入文件与处理数据相比需要一点时间时才有意义。
现在处理将完全并行执行。
顺便说一句,后缀
...Async应该只添加到可等待的方法,即您可以应用的方法await。因此,类型方法async void不能被期望,并且不能被识别为与调用代码异步的。