Synchroner Webbrowser C#

06/02/2015 15:01 stotterer09#1
Hi, gibt es ne möglichkeit mit der System.Windows.Forms.WebBrowser Klasse synchron eine URL zu laden? Ich habe das ganze jetz einfach dirty gemacht:
Code:
 private WebBrowser wb;
        private bool isready;
        public SpotifyInformationAPI()
        {
            isready = false;
            wb = new WebBrowser();
            wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(loadingdone);
        }
        private void loadingdone(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            isready = true;
        }
        public String[] getInformation(String URL)
        {
            isready = false;
            String[] array = new String[2];
            wb.Navigate(URL);
            while (!isready)
            {
                Thread.Sleep(10);
                Application.DoEvents();
            }
            string[] sep = new string[] { ", a song by ", " on Spotify" };
            array = wb.DocumentTitle.Split(sep, StringSplitOptions.RemoveEmptyEntries);
            return array;
        }
Aber gibt es keinen anderen weg?

hoffe auf hilfe

LG
06/02/2015 15:38 tolio#2
nein gibt es nicht, wenn möglich webrequests verwenden
06/02/2015 19:00 Mostey#3
Wieso bestehst du eigentlich unbedingt darauf, deinen Code synchron auszuführen?
06/02/2015 19:39 stotterer09#4
Quote:
Originally Posted by Mostey View Post
Wieso bestehst du eigentlich unbedingt darauf, deinen Code synchron auszuführen?
Ich möchte den Song Titel und den Interpreten aus einem spotify link herausfiltern:
[Only registered and activated users can see links. Click Here To Register...]

Das mache ich über den Titel der Seite und den kann ich erst auslesen nachdem die seite aufgebaut ist


Aber ich werder wie tolio vorgeschlangen hat auf web request umsteigen wenn das möglich ist, habe sowas noch nie gemacht hoffe ich kriege das hin hat jemand ein gutes tutorial ? Danke im Vorraus

LG
06/02/2015 20:17 Mostey#5
Quote:
Originally Posted by stotterer09 View Post
Das mache ich über den Titel der Seite und den kann ich erst auslesen nachdem die seite aufgebaut ist
[Only registered and activated users can see links. Click Here To Register...]


Quote:
Originally Posted by stotterer09 View Post
Aber ich werder wie tolio vorgeschlangen hat auf web request umsteigen wenn das möglich ist, habe sowas noch nie gemacht hoffe ich kriege das hin hat jemand ein gutes tutorial ? Danke im Vorraus

LG
Wäre sicherlich eine bessere und performantere Alternative. Dazu findest du sicher genug Informationen. Hier auf elitepvpers hatte auch jemand vor nicht all zu langer Zeit mal ein ausführliches Video gedreht, schau mal in der Tutorial Sektion.
06/02/2015 20:27 Kraizy​#6
1. WebBrowser löschen, wiederherstellen, nochmal löschen. Schritt je nach Lust und Laune wiederholen ;)
2. Einfach ein GET-Request an die Spotify URL senden, am einfachsten wäre es in deinem Fall natürlich einfach einen WebClient zu nutzen:

PHP Code:
Dim html As String = New Net.WebClient().DownloadString("https://open.spotify.com/track/3nzMupDBOvfUoSVutSxNaY"
Die Variable enthält nun den gesamten Seitenquelltext. Interpret, Songname usw kannst du nun einfach per Split / RegEx / HtmlAgilityPack (empfohlen) rausfiltern.

Falls du doch lieber HttpWebRequests benutzen willst, ich habe hier damals ein kleines Tutorial dazu geschrieben, kannst es dir ja mal durchlesen: [Only registered and activated users can see links. Click Here To Register...]
06/02/2015 21:17 YatoDev#7
du kannst doch warten bis die seite fertig geladen hat

Code:
WB.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
            while (!PageLoaded)
            {
......

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            PageLoaded = true;
        }
......

WebBrowser.IsBusy
06/02/2015 22:25 stotterer09#8
Quote:
Originally Posted by Mostey View Post
[Only registered and activated users can see links. Click Here To Register...]




Wäre sicherlich eine bessere und performantere Alternative. Dazu findest du sicher genug Informationen. Hier auf elitepvpers hatte auch jemand vor nicht all zu langer Zeit mal ein ausführliches Video gedreht, schau mal in der Tutorial Sektion.
Wie es dir vll. aufgefallen ist benutz ich das ereignis schon



jo ich werde umsteigen danke :D

Quote:
Originally Posted by »FlutterShy™ View Post
du kannst doch warten bis die seite fertig geladen hat

Code:
WB.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
            while (!PageLoaded)
            {
......

private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            PageLoaded = true;
        }
mach ich doch
06/02/2015 23:06 YatoDev#9
Quote:
Originally Posted by stotterer09 View Post
mach ich doch
du hast nach anderen wegen gefragt und da ist einer.

PS: Hatte das Post edit noch offen und nicht abgeschickt hatte IsBusy erst vergessen
06/03/2015 06:38 ლʕಠᴥಠʔლ#10
Warum nicht den neueren HttpClient benutzen?
Du hast zwar kein ftp und download progress report, aber die kann man sich auch leicht selber bauen.
Vor allem ist HttpClient in DNXCore nicht deprecated.