如我的代码所示,上载的图像文件有时被读取为空(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)完成。
无论使用
await myViewModel.File.CopyToAsync(memoryStream);
或根本不使用异步:
myViewModel.File.CopyTo(memoryStream);
想念,谢谢