Асинхронные запросы C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by IgrikX, 30 Jan 2011.

  1. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Можно ли как-то сделать, что бы после применения выполнения асинхронного запроса подождать, пока выполнится асинхронный запрос, а потом дальше выполнять код.
    PHP:
            public void Get(string url)
            {
                
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                
    request.CookieContainer cookie;
    // начинаем выполнять асинхронный запрос
                
    IAsyncResult iar request.BeginGetResponse(new AsyncCallback(GetCallback), request);
    // тут нужно подождать
    // потом после того как вернёт страницу, использовать содержимое страницы
            
    }
            private 
    void GetCallback(IAsyncResult iar)
            {
                
    HttpWebRequest request = (HttpWebRequest)iar.AsyncState;
                
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(iar);
                
    StreamReader stream = new StreamReader(response.GetResponseStream());
                
    cookie request.CookieContainer;
            }
     
  2. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Сделай Thread.Sleep(time);
     
  3. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    не, мне нужно что бы форма не висла! какие есть способы меня интересует, я пока вижу только применить класс обёртку над этим и воспользоваться событием. Что ещё можно?
     
  4. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    http://msdn.microsoft.com/ru-ru/library/58195swd%28v=vs.90%29.aspx
    iar.AsyncWaitHandle.WaitOne()
     
  5. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    ну, написано же "Блокирует текущий поток до получения сигнала объектом WaitHandle." Всё не то!
     
  6. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Делаю с событиями, правильно это будет или нет?
     
  7. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Создай функцию делегат и запусти ее в отдельном потоке.
     
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    а в чем тогда прикол async?
    Херню ту делаешь.

    Как вариант ManualResetEvent
     
  9. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    как вариант
    http://habrahabr.ru/blogs/net/107498/
    http://nesteruk.wordpress.com/2010/10/31/async-await-csharp5/
     
  10. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    не тру
     
  11. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    может будет проще сделать так - пишем синхронный класс для работы с сетью (можно с сокетами), далее применяем этот класс например, в классе Vk(логирование вк, там парсинг и прочая лабуда) и делаем именно класс Vk, асинхронным, или даже можно уже на самой форме делать всё асинхронным. Что скажете?