Есть форма, на форме расположен WebBrowser. С основного потока создаю несколько дополнительных:
IProgress<string> progress;
SemaphoreSlim semaphore;
private async void Button_Click(object sender, RoutedEventArgs e)
{
progress = new Progress<string>(s => WorkLog.Text += s + Environment.NewLine);
try
{
ObservableCollection<TaskTable> _devices = new ObservableCollection<TaskTable>();
int maxConcurrency = 10; // сколько одновременно может работать потоков
using ( semaphore = new SemaphoreSlim(maxConcurrency))
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < MyCollection.Count; i++)
{
int id = i;
await semaphore.WaitAsync(); // ждать, если максимальное количество уже работает, пока потоков не станет меньше
tasks.Add(Task.Run(() =>
{
AddPost(progress, id, semaphore);
}));
}
await Task.WhenAll(tasks); // ждать завершения всех
}
}
catch(Exception ex)
{
progress.Report("Ошибка в Button_Click");
}
}
Мне нужно что бы из метода AddPost(progress, id, semaphore); можно было обратиться к WebBrowser, передать ему URL страницы которую нужно загрузить и получить HTML ответ.
Пробавал передавать методу AddPost WebBrowser:
AddPost(progress, id, semaphore, WebBrowser1);
И далее в AddPost обращаться к браузеру:
WebBrowser1.Navigate(Url);
Но форма все равно зависает.
Не использую httpClient потому что перед отправкой запроса нужна предварительная авторизация, для меня реализовать оказалось слишком сложно.
Как нескольким потокам можна обращаться к WebBrowser и получать HTML загруженой страницы?
Спасибо
WebBrowserэто ерунда, которая способна лишь отобразить простенькую страничку. Авторизация, это запросы, cookie, ключи и все в этом духе. Хотите браузер - используйте полноценные движки, но мой вам совет, попробуйте проанализировать сайт, понять, как он работает, что отправляет, а затем попробуйте это все отправить простыми запросами, в большинстве случаев этого достаточно! – EvgeniyZ Feb 07 '21 at 20:29нужна предварительная авторизацияhttps://ru.stackoverflow.com/a/1217351/373567 – aepot Feb 07 '21 at 22:32WebBrowser- это Internet Explorer 11, он несовместим с интернетом, вы просто пока еще этого не поняли. ИспользуйтеWebView2илиCefSharp, если уж вам так нужен браузер и без него никак. – aepot Feb 07 '21 at 22:35Dispatcher.Invoke(() => WebBrowser1.Navigate(Url));– aepot Feb 07 '21 at 22:38