int i = 0;
Thread threadA;
  //数字变化滚动方法
        public void startA()
        {
            while (true)
            {
                Random r = new Random();
                i = r.Next(num);
                Thread.Sleep(10);               
            }
        }
 private void button7_Click(object sender, EventArgs e)
        {
            for (int aa = 1; aa < 4; aa++)
            {
                threadA = new Thread(new ThreadStart(startA));
                threadA.Start();
                threadA.Abort();
                MessageBox.Show(i.ToString());
            }
}为什么取得i的值老是0?

解决方案 »

  1.   

    New Random放到循环外,另外num是多少
      

  2.   

    另外,根据我的经验,如果4个进程同时执行而在使用i时,没有对它进行lock,几乎所有线程是同时访问其中的代码,再加之你的Random是在线程执行的方法中初始化的,这就会造成两个可能性问题:
    1、同时初始化,起始值完全相同,你的问题应该属于这一种,所以全是0;
    2、每个线程产生的随机数相同,这个我在QQ的问问中看到有人问过,当时我帮他想的方法是用线程等待,不要多个线程同时启动。