【问题标题】:C# - Problem reading File memorystream in my MVC projectC# - 在我的 MVC 项目中读取文件内存流时出现问题
【发布时间】: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


【解决方案1】:

问题是你在没有等待的情况下调用了一个异步方法。

myViewModel.File.CopyToAsync(memoryStream);

你能把你的方法改写成async并使用await这个词吗?

然后就可以等待 CopyToAsync 方法了。

await myViewModel.File.CopyToAsync(memoryStream);

【讨论】:

    【解决方案2】:

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

    随便用

    await myViewModel.File.CopyToAsync(memoryStream);
    

    或者根本不使用异步:

    myViewModel.File.CopyTo(memoryStream);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 2011-08-03
      • 2011-11-20
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多