繁体   English   中英

C#计时器,检查多线程是否完成失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM