using System;
   using System.Threading;
   using System.Text;   public class TimerExample
   {
     private string message;
     private static Timer tmr;
     private static bool complete;public static void Main()
   {
     TimerExample obj = new TimerExample();
     Thread t = new Thread(new ThreadStart(obj.GenerateText));
     t.Start();     TimerCallback tmrCallBack = new TimerCallback(obj.GetText);
     tmr = new Timer(tmrCallBack, null, TimeSpan.Zero,
                     TimeSpan.FromSeconds(2)); do
       {
         if( complete )
           break;
       } while(true);
       Console.WriteLine("Exiting Main...");
       Console.ReadLine();
     }
 public void GenerateText()
     {       StringBuilder sb = new StringBuilder();       for(int i = 1; i < 200; i++)
       {
          sb.Append( "This is Line ");
       }       message = sb.ToString();
     }
public void GetText(object state)
     {
       if(message == null)
         return;
       Console.WriteLine("Message is :");
       Console.WriteLine(message);
       tmr.Dispose();
       complete = true;
     }
   } 结果是Message is :
   This is Line 
   This is Line    ...   This is Line 
   This is Line    Exiting Main...但message并不是一个static 的变量
TimerExample obj = new TimerExample();
     Thread t = new Thread(new ThreadStart(obj.GenerateText));
     t.Start();
中的obj.GenerateText表明这是一个新建的TimerExample对象,obj.GenerateText里是对它自身
message的操作,
而public void GetText(object state)
     {
       if(message == null)
         return;
       Console.WriteLine("Message is :");
       Console.WriteLine(message);
       tmr.Dispose();
       complete = true;
     }
的message与obj.message是同一个吗,尽管程序运行没错

解决方案 »

  1.   

    是同一个,都是引用。TimerExample obj = new TimerExample();//初使化了一个TimerExample类的实例
    Thread t = new Thread(new ThreadStart(obj.GenerateText));
         t.Start();//在线程里调用了实例的obj.GenerateText()方法
    //郊果和obj.GenerateText()一样
    ………………
    ………………
    //使用定时器,运行一次就退出
      

  2.   

    但public void GetText(object state)
         {
           if(message == null)
             return;
           Console.WriteLine("Message is :");
           Console.WriteLine(message);
           tmr.Dispose();
           complete = true;
         }
    的message是main()所在类TimerExample在运行这个程序时产生的实例的成员变量
    而TimerExample obj = new TimerExample();的obj.message是在main()运行时建立的
    main()所在类TimerExample的实例的成员变量,尽管它被线程所用,两者相同?