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是同一个吗,尽管程序运行没错
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是同一个吗,尽管程序运行没错
Thread t = new Thread(new ThreadStart(obj.GenerateText));
t.Start();//在线程里调用了实例的obj.GenerateText()方法
//郊果和obj.GenerateText()一样
………………
………………
//使用定时器,运行一次就退出
{
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的实例的成员变量,尽管它被线程所用,两者相同?