Как правильно выйти из процедуры?
От: Mono.m Россия  
Дата: 20.01.07 12:48
Оценка:
Коллеги, посоветуйте как в данном случае правильно выйти из процедуры.

Т.е. если 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);
            }


Заранее спасибо за ответ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.