Еще вопросы новичка:
Этот код берет несколько прокси из списка в главном окне (я не мог понять, как сделать переменные доступными между разными функциями) и делает проверку каждого из них (простой httpwebrequest), а затем добавляет их в список под названием finishedProxies.
По какой-то причине, когда я нажимаю кнопку запуска, вся программа зависает. У меня сложилось впечатление, что Parallel создает отдельные потоки для каждого действия, оставляя только поток пользовательского интерфейса, чтобы он был отзывчивым?
private void start_Click(object sender, RoutedEventArgs e)
{
// Populate a list of proxies
List proxies = new List();
List finishedProxies = new List();
foreach (string proxy in proxiesList.Items)
{
proxies.Add(proxy);
}
Parallel.ForEach(proxies, (i) =>
{
string checkResult;
checkResult = checkProxy(i);
finishedProxies.Add(checkResult);
// update ui
/*
status.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
status.Content = "hello" + checkResult;
}
)); */
// update ui finished
//Console.WriteLine("[{0}] F({1}) = {2}", Thread.CurrentThread.Name, i, CalculateFibonacciNumber(i));
});
}
Я пробовал использовать закомментированный код для внесения изменений в пользовательский интерфейс внутри Parallel.Foreach, и это приводит к зависанию программы после нажатия кнопки запуска. Это работало у меня и раньше, но я использовал класс Thread.
Как я могу обновить пользовательский интерфейс внутри Parallel.Foreach и как сделать так, чтобы Parallel.Foreach работал так, чтобы он не заставлял пользовательский интерфейс зависать во время работы?