【发布时间】:2020-01-31 09:48:08
【问题描述】:
由于我的代码如下所示,上传的图像文件有时会被读取为空(fileContents 设置为 0)或读取一半。正如我所测试的那样,当我使用调试模式从myViewModel.File.CopyToAsync(memoryStream); 慢慢跨步到myViewModel.Image =... 时,我可以看到fileContents 正在接收正确的值。所以我认为内存流副本存在问题,但我不明白为什么。
但是,当我通过删除注释的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