Как я могу использовать HttpWebRequest.BeginGetResponse
и получать события с измененным прогрессом для загрузки метода POST?
Часть кода, который у меня сейчас есть:
HttpWebRequest req = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(uploadUri);
req.Method = "POST";
req.ContentType = "multipart/form-data; boundary=" + boundary + "";
req.ContentLength = dataBuffer.Length;
req.AllowReadStreamBuffering = false;
req.AllowWriteStreamBuffering = false;
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
ProgressText = "Waiting for request stream...";
});
req.BeginGetRequestStream(new AsyncCallback(GotRequestStreamForUpload), new SendPhotoAsyncState(req, dataBuffer, photo));
Звонок на BeginGetResponse:
request.BeginGetResponse(new AsyncCallback(GotResponseStreamForUpload), new SendPhotoAsyncState(request, null, flickRPhoto));
Как я могу сказать, что хочу бытьуведомлен об изменениях в потоке?
Я хочу иметь возможность обновлять пользовательский интерфейс в зависимости от процесса загрузки фотографий ...
Следующий код не работает с WebClient:
WebClient wc = new WebClient();
wc.UploadStringCompleted += (s, e) =>
{
// What photo is this ?
FlickRUploadPhoto fup = ((SendPhotoAsyncState)e.UserState).FlickrPhoto2Upload;
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
fup.tCompleted = DateTime.Now;
FileUploadComplete(this, new FlickRUploadCompleteEventArgs(fup));
});
};
wc.UploadProgressChanged += (s2,e2) =>
{
// Was there an error ?
// What photo is this ?
FlickRUploadPhoto fup = ((SendPhotoAsyncState)e2.UserState).FlickrPhoto2Upload;
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
fup.ProgressPercentage = e2.ProgressPercentage;
fup.ProgressPercentageString = e2.ProgressPercentage.ToString() + "%";
fup.BytesUploaded = e2.BytesSent;
});
};
string data = dataBuffer.ToString();
wc.UploadStringAsync(uploadUri, "POST", data , new SendPhotoAsyncState(null, dataBuffer, photo));
Это Silverlight ... Так что я должен использовать UploadStringAsync ??