为什么这个 Parallel.ForEach 代码会冻结程序?

2024-04-12

更多新手问题:

此代码从主窗口的列表中获取多个代理(我不知道如何使变量在不同函数之间可用)并对每个代理进行检查(简单httpwebrequest),然后将它们添加到名为的列表中finishedProxies.

由于某种原因,当我按下开始按钮时,整个程序挂起。我的印象是,并行为每个操作创建单独的线程,而单独保留 UI 线程,以便它具有响应能力?

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 类。

如何从内部更新 UIParallel.Foreach我该如何做Parallel.Foreach以便在工作时不会使 UI 冻结?

这是整个代码。 http://pastie.org/2958219


您不得在 UI 线程中启动并行处理。请参阅“避免在 UI 线程上执行并行循环”标题下的示例这一页 http://msdn.microsoft.com/en-us/library/dd997392.aspx.

Update:或者,您可以简单地手动创建一个新线程并开始在其中进行处理,正如我看到您所做的那样。这也没有什么问题。

此外,正如 Jim Mischel 指出的那样,您同时从多个线程访问列表,因此存在竞争条件。要么替代ConcurrentBag http://msdn.microsoft.com/en-us/library/dd381779.aspx for List,或将列表包装在lock每次访问它们时都声明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 Parallel.ForEach 代码会冻结程序? 的相关文章

随机推荐

  • 如何将 Django QuerySet 转换为字典列表?

    如何转换 DjangoQuerySet into a list of dict是 我还没有找到这个问题的答案 所以我想知道我是否缺少某种每个人都使用的常见辅助函数 Use the values https docs djangoprojec
  • Rails 4:使用 Cocoon Gem 将 child_index 添加到动态添加(嵌套)表单字段

    更新 我正在尝试向涉及多个模型的嵌套表单添加 删除表单字段 我看过 Ryan Bates 的 Dynamic Forms railscast 并且我提到过本文 https hackhands com building has many mo
  • php 我如何从文本文件中获取某些关键字?

    所以在服用了几次 Advil 之后 我想我需要帮助 我正在尝试制作一个脚本 让用户上传 txt 文件 该文件将如下所示 EXT DUNKIN DONUTS DAY Police vehicles remain in the parking
  • 如何在 VB.NET 中声明内联数组

    我正在寻找 VB NET 的等效项 var strings new string abc def ghi Dim strings As String abc def ghi
  • 多种环境中的.htaccess

    我知道以前曾有人问过类似的问题 但我还没有找到适合我的情况的任何真正具体的答案 我有一个在多个环境 本地 开发 生产 上运行的 ExpressionEngine 站点 每个环境都需要不同的 htaccess 规则 所有环境 删除index
  • 如何将列表从控制器传递到asp.net mvc中的javascript函数?

    我在控制器中有这个查询 DataClasses1DataContext behzad new DataClasses1DataContext var query from p in behzad ImagePaths select new
  • Jekyll 无法服务(Ruby 不兼容的库版本)

    当尝试跑步时jekyll serve 它似乎构建正确 尽管有我无法解决的警告 但随后无法提供服务 jekyll build完成 但生成的文件缺少已编译的 CSS 输出来自jekyll serve Ignoring ffi 1 9 10 be
  • PetaPoco 处理枚举吗?

    我正在尝试使用 PetaPoco 将表转换为 POCO 在我的表中 有一列名为TheEnum 此列中的值是表示以下枚举的字符串 public enum MyEnum Fred Wilma 当 PetaPoco 试图将字符串 Fred 转换为
  • 如何快速打印数组中对象的值,而不是其位置

    我有一个类 其中包含同一项目中单独的 swift 文件中某些企业家的数据 它看起来像这样 class Entrepreneur NSObject var name String var netWorth 0 0 var company St
  • 如何在不改变编码风格的情况下避免空白锚下划线?

    看看下面的小提琴 http jsfiddle net DNhAk 14 http jsfiddle net DNhAk 14 当您的图像的文本包含在锚点 链接中时 代码中图像和文本之间的空白会在呈现的页面中的文本之前创建一个带下划线的空白
  • RIFF/Wav 标头中的“LIST”块是什么?

    我正在编写一个 wav 播放器 并且使用以下文件格式规范 http soundfile sapp org doc WaveFormat http soundfile sapp org doc WaveFormat 正如您所看到的 它期望 一
  • 返回类型的具体类型或接口?

    今天我遇到了对象编程风格 具体类型或接口的一个基本悖论 对于方法的返回类型 哪个更好 具体类型还是接口 在大多数情况下 我倾向于使用具体类型作为方法的返回类型 因为我相信具体类型对于进一步使用更加灵活并且公开更多功能 其阴暗面 耦合 天使般
  • 使用窗口 ID 激活窗口

    我将如何以编程方式激活 即移动到前面并聚焦 macOS 上的窗口 不属于我的应用程序 Window ID 我的应用程序将在用户授予辅助权限等的情况下运行 令人惊讶的是 上面没有描述任何功能石英窗服务页面 https developer ap
  • 如何在每个页面上多次使用具有相同类名的 Masonry?

    我需要每页有多个砌体网格 我使用 wordpress 循环生成代码 因此每个 div 容器都具有相同的类名 有没有办法在所有同名的 div 容器上调用 Masonry html div class print slider div clas
  • PHP:三元运算符

    这似乎是一个非常简单的问题 但我尝试的一切都给了我一个错误 if query results gt have posts count results query results gt found posts 问题 如何添加else这段代码的
  • Erlang停止gen_server

    我有 gen server start UserName gt case gen server start global UserName player of ok gt io format Player UserName started
  • 为什么我的 img 错误函数失败?

    我动态构建的一些 img 元素可能会失败 对于这些情况 我从这里得到了一些代码 有没有办法以编程方式确定图像链接是错误的 https stackoverflow com questions 17702123 is there a way t
  • PHP:类似 Youtube 的短 ID,带有盐

    我需要对数据库 ID 进行编码 加密并将其附加到我的 URL 中 安全性不是我想要解决的问题 但我正在寻找具有中等安全性的东西 主要目标是拥有唯一且 URL 安全的短 ID 下面的代码片段似乎可以满足我的需要 来自http programa
  • 推送通知未显示

    我开发了一个使用推送插件的phonegap应用程序 我创建了一个示例服务器 推送消息未显示在通知栏中 但消息正在应用程序中显示 请帮忙 我的代码是 var 推送通知 function onDeviceReady app status ul
  • 为什么这个 Parallel.ForEach 代码会冻结程序?

    更多新手问题 此代码从主窗口的列表中获取多个代理 我不知道如何使变量在不同函数之间可用 并对每个代理进行检查 简单httpwebrequest 然后将它们添加到名为的列表中finishedProxies 由于某种原因 当我按下开始按钮时 整