C#-在我的MVC项目中读取文件内存流时出现问题

问题描述 投票:-1回答:2

如下图所示,有时将上载的图像文件读为空(fileContents设置为0)或半读。如我所测试,当我使用调试模式从fileContents缓慢过渡到myViewModel.File.CopyToAsync(memoryStream);时,可以看到myViewModel.Image =...正在接收适当的值。因此,我认为memorystream副本存在问题,但我不明白为什么。

但是,当我通过删除注释的System.Threading.Thread.Sleep(1000);来使线程休眠时,将正确读取图像,并且fileContents将获得适当的值。问题可以由声明using (var memoryStream = new MemoryStream())引起吗?是什么引起的问题,并且有比解决休眠问题更好的方法来解决此问题?

  if (myViewModel.File != null)
        {
            byte[] fileContents;
            using (var memoryStream = new MemoryStream())
            {
                myViewModel.File.CopyToAsync(memoryStream);
                //System.Threading.Thread.Sleep(1000);
                fileContents = memoryStream.ToArray();
                myViewModel.Image = new MyImage{ FileName = myViewModel.File.FileName, File = myViewModel.File, ContentType = myViewModel.File.ContentType, FileData = fileContents };
            }
        }
c# model-view-controller memorystream
2个回答
0
投票

问题是您正在调用异步方法而不等待它。

myViewModel.File.CopyToAsync(memoryStream);

您可以将方法重写为async并使用单词await吗?

然后您可以等待CopyToAsync方法。

await myViewModel.File.CopyToAsync(memoryStream);


0
投票

您不等待myViewModel.File.CopyToAsync(memoryStream)完成。

无论使用等待myViewModel.File.CopyToAsync(memoryStream);要么根本不使用异步:myViewModel.File.CopyTo(memoryStream);

© www.soinside.com 2019 - 2024. All rights reserved.