首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#一个多线程范例的疑问

2012-09-24 
C#一个多线程实例的疑问[codeC#][/code]public partial class Form1 : Form{Thread thread1, thread2int

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才开始执行?
  求大家指点~~小弟不甚感激呀!

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

热点排行