c# - 我的线程函数以双倍参数运行
问题描述
我正在 foreach 循环上创建线程。
我为线程提供数组值和计数,并希望查看列表。
但是我的线程 [] 随机运行相同的计数参数。
此外, T[0] 不会正常终止。我想这也与 argu 重叠问题有关..
这使得结果面板可以放置在其他面板上。
Thread[] T = new Thread[VA.Count];
int count = 0;
ThreadEnd = new CountdownEvent(VA.Count);
foreach (var item in VA)
{
T[count] = new Thread(delegate () { SetResultBox(count, item); });
T[count].Start();
count++;
}
ThreadEnd.Wait();
private void SetResultBox(int RunCount, JToken item)
{
VideoJson videoinfo = new VideoJson();
videoinfo.title = item["snippet"]["title"].ToString();
videoinfo.description = item["snippet"]["description"].ToString();
videoinfo.ThumbnailURL = item["snippet"]["url"].ToString();
VideoArray.Add(videoinfo);
SearchResultControl SRC = new SearchResultControl(videoinfo);
SRC.Location = new Point(0, RunCount * 110);
ResultControlList.Add(SRC);
ThreadEnd.Signal();
}
我想知道为什么 SetResultBox 函数的参数会重叠。
重要的是我希望没有 Join 方法。
如果 VA 数组变大,则此函数与 Join Func 一起工作太慢。
解决方案
这是一个很常见的问题,您需要为 count 创建一个专用变量以传递给委托/lambda
foreach (var item in VA)
{
var count1 = count;
T[count] = new Thread(delegate () { SetResultBox(count1, item); });
T[count].Start();
count++;
}
推荐阅读
- r - 将范围函数的输出与R中的字符串连接并打印
- php - 如何向多对多数据透视表添加额外的列
- node.js - 我是使用 node.js 制作不和谐机器人的新手,我遇到了错误,它说第 14 行和第 18 行中没有定义消息
- django - Django 命令 - django-admin 命令不起作用
- r - 计算另一列中两列的平均值
- django - Django Form - 设置数据
- mongodb-query - MongoDB:如何从查询中删除重复记录?
- android - 无法在 android studio 上启动 android 应用程序(反应原生)
- ruby-on-rails - 如何避免 bootsnap 和 railties 导致此错误?
- python-3.x - 如何在 pandas 中用 null 替换空字符串?