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# 线程问题和最佳实践 的相关文章

  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 如何检查 .NET 4.0 中的泛型参数是否是动态的

    我有课ObjectMapper
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • TestMethod:异步任务 TestSth() 不适用于 .NET 4.0

    我正在尝试使用 NET 4 0 BCL Async 和 MsTest 运行异步测试方法 看来这个设置不能处理 测试方法 异步Task测试Sth 由于测试用例资源管理器中缺少条目 将签名更改为异步后void 我可以运行测试用例 但结果错误 根
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • C++ 析构函数:何时释放内存?

    如果我删除一个导致其析构函数被调用的对象 那么内存是在析构函数完成函数中的任何操作之前还是之后被释放 仅当最小派生类子对象被销毁后才会释放内存 所以如果你有 class Base class Derived public Base publ
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • printf 参数不足

    我的问题是关于缺少参数的 printf 之后的行为 printf s blah blah d int integer was given as argument and not int written 我已经知道 如果格式参数不足 则行为是

随机推荐

  • 从实时视频设备捕获图像以供基于 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