Esempio n. 1
0
        public async Task <string> GetLocationChangeAsync(string url, CancellationToken token)
        {
            using (var apartment = new MessageLoopApartment())
            {
                // create WebBrowser inside MessageLoopApartment
                var webBrowser1 = apartment.Invoke(() => new WebBrowser());

                try
                {
                    //Console.WriteLine("URL:\n" + url);
                    var navigationCts = CancellationTokenSource.CreateLinkedTokenSource(token);
                    navigationCts.CancelAfter((int)TimeSpan.FromSeconds(30).TotalMilliseconds);
                    var navigationToken = navigationCts.Token;

                    // run the navigation task inside MessageLoopApartment
                    string newLocation = await apartment.Run(() =>
                    {
                        webBrowser1.ScriptErrorsSuppressed = true;
                        return(webBrowser1.GetLocationChangeAsync(url, navigationToken));
                    }, navigationToken);

                    return(newLocation);
                }
                finally
                {
                    // dispose of WebBrowser inside MessageLoopApartment
                    apartment.Invoke(() => webBrowser1.Dispose());
                }
            }
        }
Esempio n. 2
0
        public async Task <T> ExecutePageAsync <T>(string url, CancellationToken token, Func <WebBrowser, T> func)
        {
            using (var apartment = new MessageLoopApartment())
            {
                // create WebBrowser inside MessageLoopApartment
                var webBrowser1 = apartment.Invoke(() => new WebBrowser());

                try
                {
                    //Console.WriteLine("URL:\n" + url);
                    var navigationCts = CancellationTokenSource.CreateLinkedTokenSource(token);
                    navigationCts.CancelAfter((int)TimeSpan.FromSeconds(60).TotalMilliseconds);
                    var navigationToken = navigationCts.Token;

                    // run the navigation task inside MessageLoopApartment
                    T ret = await apartment.Run(() =>
                    {
                        webBrowser1.Width  = 1366;
                        webBrowser1.Height = 768;
                        webBrowser1.ScriptErrorsSuppressed = true;
                        return(webBrowser1.NavigateAsync <T>(url, navigationToken, func));
                    }, navigationToken);

                    return(ret);
                }
                finally
                {
                    // dispose of WebBrowser inside MessageLoopApartment
                    apartment.Invoke(() => webBrowser1.Dispose());
                }
            }
        }