Другие вопросы новичков:
Этот код захватывает несколько прокси из списка в главном окне (я не мог понять, как сделать переменные доступными между различными функциями), и выполняет проверку каждого из них (просто httpwebrequest), а затем добавляет их в список под названием finishedProxies.
По какой-то причине, когда я нажимаю кнопку запуска, вся программа зависает. У меня создалось впечатление, что Parallel создает отдельные потоки для каждого действия, оставляя поток пользовательского интерфейса отдельно, чтобы он реагировал?
private void start_Click(object sender, RoutedEventArgs e)
{
// Populate a list of proxies
List<string> proxies = new List<string>();
List<string> finishedProxies = new List<string>();
foreach (string proxy in proxiesList.Items)
{
proxies.Add(proxy);
}
Parallel.ForEach<string>(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 работать так, чтобы он не заставлял пользовательский интерфейс зависеть во время работы?