C# 使用Using块但仍使用ObjectDisposedException

C# 使用Using块但仍使用ObjectDisposedException,c#,stream,C#,Stream,我想将多个流添加到我的MultiformDataContent中,我是这样做的: MultipartFormDataContent formdata=new MultipartFormDataContent(); foreach(文件中的var项) { 使用(FileStream fs=File.Open(item,FileMode.Open,FileAccess.Read)) { HttpContent=新的StreamContent(fs); 添加(内容,“文件”,项.Split(字符分隔符

我想将多个流添加到我的
MultiformDataContent
中,我是这样做的:

MultipartFormDataContent formdata=new MultipartFormDataContent();
foreach(文件中的var项)
{
使用(FileStream fs=File.Open(item,FileMode.Open,FileAccess.Read))
{
HttpContent=新的StreamContent(fs);
添加(内容,“文件”,项.Split(字符分隔符)[2]);
}
}
//将内容发送到后端,分析结果
var result=client.PostAsync(url,formdata).result;//ObjectDisposedException

但是当我检查我的内容长度时,它是
null
,并且抛出
ObjectDisposedException

这一行只是将
fs
包装在
StreamContent
对象中

HttpContent content = new StreamContent(fs);
在调用
PostAsync
之前,不会读取流:

client.PostAsync(url, formdata)
此时您已经关闭了流。您应该在发布流之后处理它
MultipartFormDataContent
将处理它包含的任何内容对象,这将彻底处理流,因此您可以按如下方式重写代码:

using(MultipartFormDataContent formdata = new MultipartFormDataContent())
{
    foreach (var item in files)
    {
        FileStream fs = File.Open(item, FileMode.Open, FileAccess.Read);
        HttpContent content = new StreamContent(fs);
        formdata.Add(content, "files", item.Split(charSeparators)[2]);
    }
    // send the content to the backend, parse results
    var result = client.PostAsync(url, formdata).Result;
}

.

此行只是将
fs
包装在
StreamContent
对象中

HttpContent content = new StreamContent(fs);
在调用
PostAsync
之前,不会读取流:

client.PostAsync(url, formdata)
此时您已经关闭了流。您应该在发布流之后处理它
MultipartFormDataContent
将处理它包含的任何内容对象,这将彻底处理流,因此您可以按如下方式重写代码:

using(MultipartFormDataContent formdata = new MultipartFormDataContent())
{
    foreach (var item in files)
    {
        FileStream fs = File.Open(item, FileMode.Open, FileAccess.Read);
        HttpContent content = new StreamContent(fs);
        formdata.Add(content, "files", item.Split(charSeparators)[2]);
    }
    // send the content to the backend, parse results
    var result = client.PostAsync(url, formdata).Result;
}

.

我已经这样做了,但现在它抛出了一个例外,因为我试图将同一个文件用于多个进程(我使用的是模拟文件)@我猜想您需要将第4个参数传递给
File.Open
FileShare.Read
以允许您打开同一文件的多个读取流。我已经这样做了,但现在它抛出了一个异常,因为我尝试将同一文件用于多个进程(我使用的是模拟文件)@我猜想您需要将第四个参数传递到
文件.Open
文件共享.Read
以允许您打开同一文件的多个读取流。