gpt4 book ai didi

c# - 如何实现线程队列/等待?

转载 作者:行者123 更新时间:2023-11-30 17:20:24 25 4
gpt4 key购买 nike

我有一个定时器,每 15 分钟调用一个函数,这个函数计算我的 DGV 中的行数,并为每一行(另一个函数的)启动一个线程,所述线程解析一个网页,它可以从 1秒到 10 秒完成。

虽然它在处理 1-6 行时工作正常,但再这样会导致请求超时。

我希望它等待新创建的线程完成处理,然后再回到循环中创建另一个线程而不锁定主 UI

                for (int x = 0; x <= dataGridFollow.Rows.Count - 1; x++)
{
string getID = dataGridFollow.Rows[x].Cells["ID"].Value.ToString();
int ID = int.Parse(getID);
Thread t = new Thread(new ParameterizedThreadStart(UpdateLo));
t.Start(ID);
// <- Wait for thread to finish here before getting back in the for loop
}

在过去的 24 小时内,我在谷歌上搜索了很多东西,阅读了很多关于这个特定问题及其实现的内容(Thread.Join、ThreadPools、Queuing,甚至 SmartThreadPool)。

很可能我在某处读到了正确的答案,但我对 C# 不够放心,无法破解那些线程工具

谢谢你的时间

最佳答案

为了避免 UI 卡住,框架专门为这些目的提供了一个类:查看 BackgroundWorker 类(在单独的线程上执行操作),这里有一些信息:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx http://msdn.microsoft.com/en-us/magazine/cc300429.aspx

顺便说一句,如果我理解正确的话,您不想并行化任何操作,所以只需等待解析页面的方法完成即可。基本上,对于网格的每一行(foreach 外观),您都可以获得 id 并调用该方法。如果您想并行,只需重用相同的 foreach 循环并添加使其并行

http://msdn.microsoft.com/en-us/library/dd460720.aspx

关于c# - 如何实现线程队列/等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165548/

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