[英]C# Timer to check if multithreading is finished fails
我使用计时器来检查多线程是否已完成其计算。 我有一个用于计算的元素列表,以及一个将每个计算出的元素添加到其中的列表视图。 因此,多线程处理的结果应该是listview元素的数量等于我列表中元素的数量。 多线程进行计算。
所以我使用一个计时器,它将每10秒检查一次listview元素的数量是否等于list元素的数量,如果是,它将发出警报。
这也部分起作用,但是问题是我收到了大约15个警报,而不仅仅是一个警报。 我也尝试使用像这样的可变块:
if(!block)
{
Alert();
block = true;
}
但是我仍然会收到15条警报。 要说的重要一点是,计时器不是(或应该)不是多线程方法的一部分,并且将在多线程启动之后而不是在多线程方法中首次调用。
如果您没有将计时器用于显示用户所需时间等目的,请执行此操作。
class Program
{
static List<byte> bytes = new List<byte>();
static int maxElements = 400_000;
static Random random = new Random();
static int portionSize;
static void Main(string[] args)
{
GenerateBytes();
portionSize = maxElements / 4;
ParallelLoopResult result = Parallel.For(0, 4, n =>
{
int portion = n * portionSize;
for (int i = portion; i < portion + portionSize; i++)
{
bytes[i] = (byte)(bytes[i] * 2);
}
});
Console.WriteLine();
}
static void GenerateBytes()
{
for (int i = 0; i < maxElements; i++)
{
bytes.Add((byte)random.Next(0, 11));
}
}
因为我有4个内核,所以在我的机器上计算400,000个元素非常快。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.