Wykrycie końca działania funkcji

0

Cześć, mam takie coś

private void pobierzArtykuly(string source)
        {
            System.Uri targetUri = new System.Uri(source);
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
            request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback2), request);
           //tutaj dalsza funkcja ktora bedzie wykonywała sie po zakonczeniu powyzszego
        }
 

jak zrobic zeby funkcje ktore są wywoływane po BeginGetResponse działały dopiero w momencie zakonczenia działania powyższych instrukcji?

0

Jak chcesz, żeby wykonywało się po zakończeniu requesta to chyba musisz te instrukcje dać w metodzie, którą przekazujesz jako callback.

Możesz to zrobić prościej i czytelniej stosując async-await.

0

Zakopałem się i nie mogę się odkopać.
Przy inicjacji aktywności wywołuje tą metodę

public async void WyswietlKomunikat()
        {
           string tmp =await WaitSynchronously("http://www.pollub.pl/pl/news");
            UIThread.Invoke(()=>MessageBox.Show(listaPobranychArtykulow.Count.ToString()));
        }
 

Następnie w zdefiniowanej metodzie

WaitSynchronously() 

wywołuje metodę gdzie pobieram z strony www.pollub.pl/news indeks ostatniego news'a dodanego na stronę

public async Task<string> WaitSynchronously(string source)
        {
            HttpClient client = new HttpClient();
            HttpContent content = new StringContent("text/html; charset=utf-8");
            HttpResponseMessage ResponceResult = await client.PostAsync(source, content);
            string responseBody = await ResponceResult.Content.ReadAsStringAsync();
            var tmp1 = await pobierzIndeksNajswiezszegoArtykulu(responseBody);
            return responseBody;
        } 
 
private async Task<string> pobierzIndeksNajswiezszegoArtykulu(string source)
        {
            int indeksOstatniegoArtykulu = Convert.ToInt16(Artykuly.parserWybranychElementow(source, "/pl/news/get/id/", "\" class=\"image\">", "/pl/news/get/id/".Length, 0));
            IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
            if (!isf.DirectoryExists(folderName))
            {
                for (int i = indeksOstatniegoArtykulu; i > indeksOstatniegoArtykulu - 100; i--)
                {
                    listaPobranychArtykulow.Add(await WaitSynchronously("http://www.pollub.pl/pl/news/get/id/"+i.ToString()));
                    
                }
            }
            return "1";
        }

a w tej ostaniej metodzie w pętli chce sobie zapisać kolejne źródła stron do listy, którą później sparsuje i będe przechowywać przy pomocy

 IsolatedStorage

Jednak to nie działa tak jak powinno, gdy usunę z funkcji

WyswietlKomunikat() 

MessageBoxa to nie wyłącza się ale tez nic się nie dzieje, a gdy jest on w tej funkcji to applikacja wiesza się i wyrzuca wyjątek System.NotSuppartedException

 w this.MainWindow 

Ktoś naprowadzi jak mogę zrobić to pobieranie? jesli chodzi o linki do poszczególnych stron to niektóre strony nie istnieją, ale nawet przy używaniu warunków czy 
```csharp
try/catch 

nic to nie dawało.

0

Jednak to nie działa tak jak powinno

Tzn. co nie działa i co się dzieje?

Ja z twojego opisu nic nie zrozumiałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1