C# 线程问题和最佳实践

2024-02-06

这是我第一次在 C# 应用程序中使用线程。基本上它是一个应用程序,用于检查列表中的一堆网站是死是活。

这是我第一次尝试使用多线程

    public void StartThread(string URL,int no)
    {
        Thread newThread = new Thread(() =>
        {
            BeginInvoke(new Action(() => richTextBox1.Text += "Thread " + no + " Running" + Environment.NewLine));
            bool b = ping(URL);
            if (b == true) { BeginInvoke(new Action(() => richTextBox2.Text += "Okay" + Environment.NewLine)); }
            else
            { return; }
        });

        newThread.Start();
    }

我使用上面的函数来创建新线程,并且每个线程都是在循环内创建的。

foreach(网站中的字符串网站){ StartThread(站点,i); 我++; // 柜台 }

由于我是初学者,所以我有几个问题。

  1. 该代码工作正常,但我不确定这是否是最好的解决方案
  2. 有时线程运行完美,但有时线程不会从方法返回任何值ping()它使用 WebRequest 检查主机并返回 true(如果其在线)。平常吗?
  3. 如果我要求用户指定他需要使用的线程数,我如何在这些线程之间平均分配工作?
  4. 他们是我跟踪线程状态(死/活)的优雅方式吗?我目前使用rocess.GetCurrentProcess().Threads.Count;

为每个请求启动一个新线程效率很低……您可能希望拥有固定数量的工作线程(这样就可以在 cpu 的每个核心上运行)

看看ConcurrentQueue<T>类,它将为您提供一个线程安全的先进先出队列,您可以在其中将请求排队,并让每个工作线程将请求出队,处理它,依此类推,直到队列为空......

请注意,您可能无法从主 GUI 线程之外的其他线程调用 GUI 上的控件...看看ISynchronizeInvoke接口可以帮助您决定是否需要通过调用另一个线程来处理跨线程情况

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

C# 线程问题和最佳实践 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 从实时视频设备捕获图像以供基于 Java 的应用程序使用的最佳方法是什么?

    我正在研究某些场景的半实时检测的图像处理问题 我的目标是让实时视频以 Motion JPEG 帧的形式出现在我的 Java 代码中somehow 我熟悉Java媒体框架 http java sun com javase technologi
  • 基于网络的可视化查询生成器

    我正在寻找一个可视化查询生成器http ajax easyquerydemo com http ajax easyquerydemo com 我使用的是 ASP NET 但使用的是 MVC 所以宁愿使用不基于 WebForms 的东西 如链
  • Python 中位串的逻辑或

    我想要做的是获得两个位串的逻辑或的结果 例如 a 010010 b 000101 c LOGIC OR a b c 010111 我大多数时候遇到的错误是当我将 b 从字符串转换为二进制时 它会删除前导零 我使用的其他方法将 a 和 b 转
  • 有没有一种方法可以仅使用 PHP 获取 Google 地图中给定地址的经度/纬度?

    我知道这在 Javascript 中是可能的 但我需要仅使用 PHP 来做到这一点 我该怎么办 是的 有一个HTTP 地理编码接口 http code google com apis maps documentation geocoding
  • 如何将 _app.js 包装在多个提供者中?

    我想知道是否可能以及如何包装我的顶级页面 app js在 Redux 提供程序中 我已经将其包装为 Next auth 提供程序 例如 import React from react import Provider from next au
  • 通过jquery一起提交表单和变量

    我正在使用两种类型的提交 有 post post servers side php var1 var1 var2 var2 function result some code 它将单独的变量发送到服务器端脚本 还有 AjaxSubmit 插
  • Gui JList 动作监听器

    嘿大家晚上好 我对名为 提交 的第二个按钮有一个问题 因为我无法将我输入的所有信息传输到框架中的空 JList 这是我的代码 到目前为止我的问题是 如果我单击 提交 我的所有信息将显示在我的框架中的消息区域需要列出 谢谢 import ja
  • Windows 模拟和复制令牌

    我有一个 asp net 项目 其中请求将工作委托给后台 通过quartz net Web 应用程序使用 Windows 身份验证和模拟 我还想在后台线程上模拟当前用户 我已经阅读了如何使用提供的域名 用户名和密码来模拟用户并调用内核 这个
  • 构建具有项目共存频率的稀疏矩阵(用于分析产品的交叉销售)[重复]

    这个问题在这里已经有答案了 我坚持创建一个稀疏矩阵 在其中我可以根据购物车和产品 ID 来计算产品的交叉销售频率 示例数据框 x data frame cart id c 1 1 1 2 2 3 4 5 5 6 product id c A
  • 当目标路径包含表情符号字符时,复制快捷方式文件(*.lnk)的目标

    我的目标是编写一个简单的 Powershell 脚本 该脚本将采用一个强制参数 该参数必须是快捷方式 lnk 文件的完整文件路径 然后该脚本将解析快捷方式的目标项 文件或目录 并将其复制到脚本的当前工作目录中 我发现的问题是在测试其目标项指
  • 如何使用 no_std 和分配器将输出格式化为字节数组?

    我想做类似的事情 let x 123 let mut buf 0 as u8 20 format to x gt buf assert eq buf 3 b 123 With no std 并且没有任何内存分配器 据我了解 有一个实现cor
  • MATLAB JA Builder 在 MCRConfiguration 中引发 NullPointerException

    我正在尝试使用 JA Builder 从 Java 执行 MATLAB 函数 我遵循 MATLAB JA Builder 帮助文档 HelloWorld 和 MagicSquare 示例 每次都会收到以下堆栈跟踪 Exception in
  • Kendo UI DropDownList 更改触发事件

    我是第一次使用 Kendo UI 在触发 Kendo 下拉列表更改中的功能时遇到一些困难 我的目标是根据用户的下拉选择显示不同的搜索字段 我尝试了几种不同的方法 但似乎没有任何效果 有人有一个简单的 jQuery 片段可以获取 Kendo
  • 如何使用 Chrome Devtools 协议接收嵌入式 iframe 的事件?

    我正在尝试使用Chrome 开发者工具协议 https chromedevtools github io devtools protocol tot Network 列出选项卡的网络和日志事件 我成功地为顶级框架做到了这一点 但在儿童 if
  • 在 Eclipse 的 Android 设备中看不到 Nexus7 [重复]

    这个问题在这里已经有答案了 可能的重复 ADB 无法识别我的 Galaxy Nexus Win7 https stackoverflow com questions 8801829 adb dosnt recognize my galaxy
  • Java 8用于计算小数年龄的日期时间[重复]

    这个问题在这里已经有答案了 我是 Java 8 日期时间 API 的新手 想知道如何计算以小数表示的年龄 它返回双精度值 例如 30 5 这意味着 30 年零 6 个月 例如 下面的示例代码得到的输出为 30 0 但不是 30 5 这可能是
  • 散列和索引有什么区别?

    我研究了 DBMS 中的哈希 可扩展 线性 和 DBMS 中的索引 稀疏 密集 基于辅助键的索引等 但我无法理解哈希和索引之间的区别 这两种技术是一起使用还是单独使用 我很困惑 因为这两种技术的目的似乎都是为了让我们能够快速检索数据 所以我
  • EL 语法错误是 en

    JSP页面中的以下语句在第一个附近遇到错误equals出现这种情况 请问是什么原因 如何解决 请尽快纠正 fn length updateStock todayDimensionStones i count DimensionStones
  • 以编程方式获取当前页面

    在 JSF 支持 Bean 托管 Bean 焊接 Bean 无关紧要 中 我可以通过调用获取客户端所在的上下文路径 FacesContext ctx FacesContext getCurrentInstance String path c
  • C# 线程问题和最佳实践

    这是我第一次在 C 应用程序中使用线程 基本上它是一个应用程序 用于检查列表中的一堆网站是死是活 这是我第一次尝试使用多线程 public void StartThread string URL int no Thread newThrea