日期:2014-05-17  浏览次数:20875 次

C#一个多线程实例的疑问
[code=C#][/code]public partial class Form1 : Form
  {
  Thread thread1, thread2;
  int num = 0;
  int[] a1 = new int[4]{0,0,0,0};
  int[] a2 = new int[4]{0,0,0,0};
  private delegate void delFun();
  public Form1()
  {
  InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
  thread1 = new Thread(new ThreadStart(Invoke_Fun1));
  thread1.IsBackground = true;
  thread1.Priority = ThreadPriority.Normal;
  thread2 = new Thread(new ThreadStart(Invoke_Fun2));
  thread2.IsBackground = true;
  thread2.Priority = ThreadPriority.Normal;
  thread1.Start();
  thread2.Start();
  }

  private void Invoke_Fun1()
  {
  BeginInvoke(new delFun(Fun1));
  }

  private void Invoke_Fun2()
  {
  BeginInvoke(new delFun(Fun2));
  }

  public void Fun1()
  {
  int k, n;
  for (k = 0; k < 4; k++)
  {
  n = num;
  Thread.Sleep(25);
  num = n + 1;
  a1[k] = num;
  }
  label1.Text = Convert.ToString(num);
  label2.Text = "";
  for (k = 0; k < 4; k++)
  label2.Text += Convert.ToString(a1[k]);
  }

  public void Fun2()
  {
  int k, n;
  for (k = 0; k < 4; k++)
  {
  n = num;
  Thread.Sleep(15);
  num = n + 1;
  a2[k] = num;
  }
  label1.Text = Convert.ToString(num);
  label3.Text = "";
  for (k = 0; k < 4;k++ )
  label3.Text += Convert.ToString(a2[k]);
  }
  }
  这是一段很简单的代码,界面编辑器里面只有3个Label。这段代码的执行结果让我不理解:Label1始终显示8;Label2显示1234(或5678);Label3显示5678(或1234)!
  我的疑问:既然thread1和thread2是两个不相干的线程,且优先级都一样,为什么这里结果且标明:要么thread1执行完毕后thread2才开始执行,要么thread2执行完毕后thread1才开始执行?
  求大家指点~~小弟不甚感激呀!

------解决方案--------------------
这种调用写法好繁琐,有必要单独写个委托方法?