gpt4 book ai didi

C# 线程问题和最佳实践

转载 作者:行者123 更新时间:2023-12-01 01:10:09 25 4
gpt4 key购买 nike

这是我第一次在 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 (string site in website) { StartThread(site,i); i++; // Counter }



因为我是初学者,所以我有几个问题。
  • 代码运行良好,但我不确定这是否是最佳解决方案
  • 有时线程运行完美,但有时线程不从方法 返回任何值平()它检查主机,如果它使用 WebRequest 在线,则返回 true。平常吗?
  • 如果我要求用户指定他需要使用的线程数,我如何在这些线程之间平均分配工作?
  • 他们是我跟踪线程状态(死/活)的一种优雅方式吗?我目前使用 rocess.GetCurrentProcess().Threads.Count;
  • 最佳答案

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

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

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

    关于C# 线程问题和最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850633/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com