C# 等待HttpPostedBaseFile另存为完成

C# 等待HttpPostedBaseFile另存为完成,c#,file-upload,upload,save,save-as,C#,File Upload,Upload,Save,Save As,我想在继续之前等待SaveAs完成,我尝试了一些不同的解决方案,但它仍然会立即继续,而不是等待上传完成。我所尝试的: 创建包装函数以返回int(这是我在堆栈溢出中发现的): 在我的主要方法中运行这个: var success = SaveFile(hpf, savedFileName); 我还尝试检查文件是否准备就绪: while (!IsFileReady(filePath)) { System.Threading.Thread.Sleep(500); } 称之为: [A

我想在继续之前等待SaveAs完成,我尝试了一些不同的解决方案,但它仍然会立即继续,而不是等待上传完成。我所尝试的:

创建包装函数以返回int(这是我在堆栈溢出中发现的):

在我的主要方法中运行这个:

var success = SaveFile(hpf, savedFileName);
我还尝试检查文件是否准备就绪:

while (!IsFileReady(filePath))
{
     System.Threading.Thread.Sleep(500);
}
称之为:

    [Authorize(Roles = "L,I")]
    public static bool IsFileReady(String sFilename)
    {
        // If the file can be opened for exclusive access it means that the file
        // is no longer locked by another process.
        try
        {
            using (FileStream inputStream = System.IO.File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                if (inputStream.Length > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
        }
        catch (Exception)
        {
            return false;
        }
    }

再说一次,运气不好。我只需要确保file.SaveAs(…)等待文件完成上载后才能继续。

我不确定代码,但我认为Task/await可能就是您要查找的。您可以接受异常。检查是否有……没有例外。
    [Authorize(Roles = "L,I")]
    public static bool IsFileReady(String sFilename)
    {
        // If the file can be opened for exclusive access it means that the file
        // is no longer locked by another process.
        try
        {
            using (FileStream inputStream = System.IO.File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                if (inputStream.Length > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
        }
        catch (Exception)
        {
            return false;
        }
    }