Pourquoi ce code Parallel.ForEach gèle-t-il le programme?

Plus des questions de newbie:

Ce code attrape un certain nombre de procurations de la liste dans la fenêtre principale (je ne pouvais pas comprendre comment faire de variables disponibles entre les différentes fonctions) et effectue une vérification sur chacun (simple httpwebrequest) et puis les ajoute à une liste appelée finishedProxies.

Pour quelque raison que quand j'appuie sur le bouton de démarrage, l'ensemble du programme se bloque en place. J'étais sous l'impression que le Parallèle crée des threads séparés pour chaque action, laissant le thread d'INTERFACE utilisateur seulement, de sorte qu'il est sensible?

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


        }

J'ai essayé d'utiliser le code est commenté pour apporter des modifications à l'INTERFACE utilisateur à l'intérieur de la Parallèle.Foreach et il rend le programme gel après le bouton de démarrage est enfoncé. Il a travaillé pour moi avant, mais j'ai utilisé de la classe Thread.

Comment puis-je mettre à jour l'INTERFACE utilisateur de l'intérieur de la Parallèle.Foreach et comment puis-je faire en Parallèle.Foreach travail, afin de ne pas rendre l'INTERFACE de gel alors que cela fonctionne?

Voici le code entier.

source d'informationauteur dsp_099