如下图所示,有时将上载的图像文件读为空(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 };
}
}
问题是您正在调用异步方法而不等待它。
myViewModel.File.CopyToAsync(memoryStream);
您可以将方法重写为async
并使用单词await
吗?
然后您可以等待CopyToAsync方法。
await myViewModel.File.CopyToAsync(memoryStream);
您不等待myViewModel.File.CopyToAsync(memoryStream)完成。
无论使用等待myViewModel.File.CopyToAsync(memoryStream);要么根本不使用异步:myViewModel.File.CopyTo(memoryStream);