Коллеги, посоветуйте как в данном случае правильно выйти из процедуры.
Т.е. если cancel = true — отменяем всё нафик.
(сорри за табуляцию — установил последний sp, shift+tab перестал работать)
cancel = false;
try
{
SetStatus(barStaticItem1, "Соединение с сервером…");
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://microsoft.com");
if (cancel) { req.Abort(); return; }
req.BeginGetResponse(
delegate(IAsyncResult iar)
{
using (HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(iar))
{
// нужно ли использовать resp.Close()? или объект resp закроется автоматически, т.к. внутри Using?
if (cancel) { req.Abort(); resp.Close(); return; }
//
using (Stream sr = resp.GetResponseStream())
{
if (cancel) { req.Abort(); resp.Close(); sr.Close(); return; }
byte[] buff = new byte[4096];
int read = 1;
int size = 0;
using (MemoryStream data = new MemoryStream())
{
while (read > 0)
{
// Вот тут проблема: несмотря на break() процедура SetStatus(barStaticItem1, "Загрузка…") всё-равно вызывается :-(
if (cancel) { break; }
read = sr.Read(buff, 0, buff.Length);
data.Write(buff, 0, read);
size += read;
SetStatus(barStaticItem1, "Загрузка…");
SetStatus(barStaticItem2, string.Format("{0} K", size / 1024));
}
if (cancel) {req.Abort(); resp.Close(); sr.Close(); data.Close(); return; }
SetStatus(barStaticItem1, "Готово");
Parse(Encoding.Default.GetString(data.ToArray()));
}
}
}
}, null);
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}
Заранее спасибо за ответ.