我有一个dot net windows应用程序,它将大文件上传到Intranet网站。虽然上传工作正常,但我也想知道上传的进度。
我看到webRequest.GetResponse()是需要时间的线。该控件几乎立即从GetRequestStream中出来,我认为这是在本地发生的,不需要服务器连接。
using (var reqStream = webRequest.GetRequestStream())
{
reqStream.Write(tempBuffer, 0, tempBuffer.Length);
}
我尝试将其转换为异步调用,但也需要花费相同的时间来访问RespCallback方法。
IAsyncResult result = (IAsyncResult)webRequest.BeginGetResponse(new AsyncCallback(RespCallback), requestState);
private void RespCallback(IAsyncResult asyncResult)
{
WebRequestState reqState = ((WebRequestState)(asyncResult.AsyncState));
}
我想跟踪发送到服务器的字节,以便显示进度条。我怎么能这样做?
答案 0 :(得分:0)
你有没有试过WebClient课程?和UploadXXXAsyn()方法?
答案 1 :(得分:0)
将异步上传视为一个单独的线程,一旦上传了信息,程序的其余部分就会运行,并且一旦收到响应就会触发事件处理程序。
您应该使用WebClient课程。
例如:
public string result; //Variable for returned data to go.
public void UploadInfo(string URL, string data)
{
WebClient client = new WebClient(); //Create new instance of WebClient
client.UploadStringCompeleted += new UploadStringCompletedEventHandler(client_uploadComplete); //Tell client what to do once upload complete
client.UploadStringAsync(new uri(URL), data); //Send data to URL specified
}
public void client_uploadComplete(object sender, UploadStringCompletedEventArgs e)
{
if (e.Error == null) //If server does not return error
{
result = e.Result; //Place returned value into "result" string
}
}
这只是一个基本的代码,我不确定它是否适合您,因为它取决于您使用的服务器端技术加上其他因素,但它应该指向正确的方向。
如果您正在使用某些服务器端数据交换格式,例如json,则在向服务器发送信息之前,您需要以下行。
client.Headers[HttpRequestHeader.ContentType] = "application/json";
确保将“application / json”更改为您正在使用的任何内容。
祝你好运!