为了账号安全,请及时绑定邮箱和手机立即绑定

在线程方法中隐藏值

在线程方法中隐藏值

C#
尚方宝剑之说 2021-05-18 18:11:33
您好我正在尝试在线程lambda方法内传递循环的当前索引并打印它。该方法将仅显示索引的最后一个值。class Program {        public static EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.AutoReset);        public static EventWaitHandle autohandle = new EventWaitHandle(false, EventResetMode.AutoReset);        static readonly int ThreadNum=3;        static void Main(string[] args) {            object lk = new object();            new Thread(() => {                while (true) {                    var key = Console.ReadKey();                    if(key.Key==ConsoleKey.A) {                        handle.Set();                    } else {                        handle.Reset();                    }                    Thread.Sleep(3000);                }            }).Start();            for(int i=0;i<ThreadNum;i++) {                new Thread(() => {                    int val = i;                    Console.WriteLine($"Thread:{val} created");                    while (true) {                        handle.WaitOne();                        Console.WriteLine($"From thread:{val}");                        Thread.Sleep(1000);                    }                }).Start();            }            Console.WriteLine("Hello World!");        }    }有人可以向我解释为什么我只得到索引的最后一个值。我理解索引被阻塞了(创建了一个复制索引值的类),但是当第一次迭代进入线程方法时,它应该阻塞i = 0并保持这种方式。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信