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()); } } }
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()); } } }