Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
C#×ۺϽÒÃØ¡ª¡ªÏ¸Ëµ¶àỊ̈߳¨ÉÏ£©
 
×÷Õß ·ç³¾ÀË×ӵIJ©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-31
  2776  次浏览      29
 

ÒýÑÔ

±¾ÎÄÖ÷Òª´ÓÏ̵߳Ļù´¡Ó÷¨£¬CLRÏ̳߳ص±Öй¤×÷ÕßÏß³ÌÓëI/OÏ̵߳Ŀª·¢£¬²¢ÐвÙ×÷PLINQµÈ¶à¸ö·½Ãæ½éÉܶàÏ̵߳Ŀª·¢¡£

ÆäÖÐίÍеÄBeginInvoke·½·¨ÒÔ¼°»Øµ÷º¯Êý×îΪ³£Óá£

¶ø I/OÏ߳̿ÉÄÜÈÝÒ×Ôâµ½´ó¼ÒµÄºöÂÔ£¬ÆäʵÔÚ¿ª·¢¶àÏß³Ìϵͳ£¬¸üÓ¦¸Ã¶àÁôÒâI/OÏ̵߳IJÙ×÷¡£ÌرðÊÇÔÚASP.NET¿ª·¢µ±ÖУ¬¿ÉÄܸü¶àÈËÖ»»áÁôÒâÔÚ¿Í»§¶ËʹÓÃAjax»òÕßÔÚ·þÎñÆ÷¶ËʹÓÃUpdatePanel¡£ÆäʵºÏÀíʹÓÃI/OÏß³ÌÔÚͨѶÏîÄ¿»òÎļþÏÂÔØÊ±£¬Äܾ¡¿ÉÄܵؼõÉÙIISµÄѹÁ¦¡£

²¢Ðбà³ÌÊÇFramework4.0Öм«Á¦ÍƹãµÄÒì²½²Ù×÷·½Ê½£¬¸üÖµµÃ¸üÉîÈëµØÑ§Ï°¡£

Ï£Íû±¾ÆªÎÄÕÂÄܶԸ÷λµÄѧϰÑо¿ÓÐËù°ïÖú£¬µ±ÖÐÓÐËù´í©µÄµØ·½¾´ÇëµãÆÀ¡£

Ŀ¼

Ò»¡¢Ï̵͍߳Òå

¶þ¡¢Ï̵߳Ļù´¡ÖªÊ¶

Èý¡¢ÒÔThreadStart·½Ê½ÊµÏÖ¶àÏß³Ì

ËÄ¡¢CLRÏ̳߳صŤ×÷ÕßÏß³Ì

Îå¡¢CLRÏ̳߳صÄI/OÏß³Ì

Áù¡¢Òì²½ SqlCommand

Æß¡¢²¢Ðбà³ÌÓëPLINQ

°Ë¡¢¼ÆÊ±Æ÷ÓëËø

Ò»¡¢Ï̵͍߳Òå

1. 1 ½ø³Ì¡¢Ó¦ÓóÌÐòÓòÓëÏ̵߳ĹØÏµ

½ø³Ì£¨Process£©ÊÇWindowsϵͳÖеÄÒ»¸ö»ù±¾¸ÅÄËü°üº¬×ÅÒ»¸öÔËÐгÌÐòËùÐèÒªµÄ×ÊÔ´¡£½ø³ÌÖ®¼äÊÇÏà¶Ô¶ÀÁ¢µÄ£¬Ò»¸ö½ø³ÌÎÞ·¨·ÃÎÊÁíÒ»¸ö½ø³ÌµÄÊý¾Ý£¨³ý·ÇÀûÓ÷ֲ¼Ê½¼ÆË㷽ʽ£©£¬Ò»¸ö½ø³ÌÔËÐеÄʧ°ÜÒ²²»»áÓ°ÏìÆäËû½ø³ÌµÄÔËÐУ¬Windowsϵͳ¾ÍÊÇÀûÓýø³Ì°Ñ¹¤×÷»®·ÖΪ¶à¸ö¶ÀÁ¢µÄÇøÓòµÄ¡£½ø³Ì¿ÉÒÔÀí½âΪһ¸ö³ÌÐòµÄ»ù±¾±ß½ç¡£

Ó¦ÓóÌÐòÓò£¨AppDomain£©ÊÇÒ»¸ö³ÌÐòÔËÐеÄÂß¼­ÇøÓò£¬Ëü¿ÉÒÔÊÓΪһ¸öÇáÁ¿¼¶µÄ½ø³Ì£¬.NETµÄ³ÌÐò¼¯ÕýÊÇÔÚÓ¦ÓóÌÐòÓòÖÐÔËÐеģ¬Ò»¸ö½ø³Ì¿ÉÒÔ°üº¬Óжà¸öÓ¦ÓóÌÐòÓò£¬Ò»¸öÓ¦ÓóÌÐòÓòÒ²¿ÉÒÔ°üº¬¶à¸ö³ÌÐò¼¯¡£ÔÚÒ»¸öÓ¦ÓóÌÐòÓòÖаüº¬ÁËÒ»¸ö»ò¶à¸öÉÏÏÂÎÄcontext£¬Ê¹ÓÃÉÏÏÂÎÄCLR¾ÍÄܹ»°ÑÄ³Ð©ÌØÊâ¶ÔÏóµÄ״̬·ÅÖÃÔÚ²»Í¬ÈÝÆ÷µ±ÖС£

Ị̈߳¨Thread£©Êǽø³ÌÖеĻù±¾Ö´Ðе¥Ôª£¬ÔÚ½ø³ÌÈë¿ÚÖ´ÐеĵÚÒ»¸öÏ̱߳»ÊÓΪÕâ¸ö½ø³ÌµÄÖ÷Ï̡߳£ÔÚ.NETÓ¦ÓóÌÐòÖУ¬¶¼ÊÇÒÔMain()·½·¨×÷ΪÈë¿ÚµÄ£¬µ±µ÷Óô˷½·¨Ê±ÏµÍ³¾Í»á×Ô¶¯´´½¨Ò»¸öÖ÷Ï̡߳£Ïß³ÌÖ÷ÒªÊÇÓÉCPU¼Ä´æÆ÷¡¢µ÷ÓÃÕ»ºÍÏ̱߳¾µØ´æ´¢Æ÷£¨Thread Local Storage£¬TLS£©×é³ÉµÄ¡£CPU¼Ä´æÆ÷Ö÷Òª¼Ç¼µ±Ç°ËùÖ´ÐÐÏ̵߳Ä״̬£¬µ÷ÓÃÕ»Ö÷ÒªÓÃÓÚά»¤Ïß³ÌËùµ÷Óõ½µÄÄÚ´æÓëÊý¾Ý£¬TLSÖ÷ÒªÓÃÓÚ´æ·ÅÏ̵߳Ä״̬ÐÅÏ¢¡£

½ø³Ì¡¢Ó¦ÓóÌÐòÓò¡¢Ï̵߳ĹØÏµÈçÏÂͼ£¬Ò»¸ö½ø³ÌÄÚ¿ÉÒÔ°üÀ¨¶à¸öÓ¦ÓóÌÐòÓò£¬Ò²ÓаüÀ¨¶à¸öỊ̈߳¬Ïß³ÌÒ²¿ÉÒÔ´©ËóÓÚ¶à¸öÓ¦ÓóÌÐòÓòµ±ÖС£µ«ÔÚͬһ¸öʱ¿Ì£¬Ïß³ÌÖ»»á´¦ÓÚÒ»¸öÓ¦ÓóÌÐòÓòÄÚ¡£

ÓÉÓÚ±¾ÎÄÊÇÒÔ½éÉܶàÏ̼߳¼ÊõΪÖ÷Ì⣬¶Ô½ø³Ì¡¢Ó¦ÓóÌÐòÓòµÄ½éÉܾ͵½´ËΪֹ¡£¹ØÓÚ½ø³Ì¡¢Ï̡߳¢Ó¦ÓóÌÐòÓòµÄ¼¼Êõ£¬ÔÚ¡°C#×ۺϽÒÃØ¡ª¡ªÏ¸Ëµ½ø³Ì¡¢Ó¦ÓóÌÐòÓòÓëÉÏÏÂÎÄ¡±»áÓÐÏêϸ½éÉÜ¡£

1.2 ¶àÏß³Ì

ÔÚµ¥CPUϵͳµÄÒ»¸öµ¥Î»Ê±¼ä£¨time slice£©ÄÚ£¬CPUÖ»ÄÜÔËÐе¥¸öỊ̈߳¬ÔËÐÐ˳ÐòÈ¡¾öÓÚÏ̵߳ÄÓÅÏȼ¶±ð¡£Èç¹ûÔÚµ¥Î»Ê±¼äÄÚÏß³ÌδÄÜÍê³ÉÖ´ÐУ¬ÏµÍ³¾Í»á°ÑÏ̵߳Ä״̬ÐÅÏ¢±£´æµ½Ï̵߳ı¾µØ´æ´¢Æ÷£¨TLS£© ÖУ¬ÒÔ±ãÏ´ÎÖ´ÐÐʱ»Ö¸´Ö´ÐС£¶ø¶àÏß³ÌÖ»ÊÇϵͳ´øÀ´µÄÒ»¸ö¼ÙÏñ£¬ËüÔÚ¶à¸öµ¥Î»Ê±¼äÄÚ½øÐжà¸öÏ̵߳ÄÇл»¡£ÒòΪÇл»ÆµÃܶøÇÒµ¥Î»Ê±¼ä·Ç³£¶ÌÔÝ£¬ËùÒÔ¶àÏ߳̿ɱ»ÊÓ×÷ͬʱÔËÐС£

Êʵ±Ê¹ÓöàÏß³ÌÄÜÌá¸ßϵͳµÄÐÔÄÜ£¬±ÈÈ磺ÔÚϵͳÇëÇó´óÈÝÁ¿µÄÊý¾ÝʱʹÓöàỊ̈߳¬°ÑÊý¾ÝÊä³ö¹¤×÷½»¸øÒì²½Ị̈߳¬Ê¹Ö÷Ï̱߳£³ÖÆäÎȶ¨ÐÔÈ¥´¦ÀíÆäËûÎÊÌâ¡£µ«ÐèҪעÒâÒ»µã£¬ÒòΪCPUÐèÒª»¨·Ñ²»ÉÙµÄʱ¼äÔÚÏ̵߳ÄÇл»ÉÏ£¬ËùÒÔ¹ý¶àµØÊ¹ÓöàÏ̷߳´¶ø»áµ¼ÖÂÐÔÄܵÄϽµ¡£

¶þ¡¢Ï̵߳Ļù´¡ÖªÊ¶

2.1 System.Threading.ThreadÀà

System.Threading.ThreadÊÇÓÃÓÚ¿ØÖÆÏ̵߳Ļù´¡À࣬ͨ¹ýThread¿ÉÒÔ¿ØÖƵ±Ç°Ó¦ÓóÌÐòÓòÖÐÏ̵߳Ĵ´½¨¡¢¹ÒÆð¡¢Í£Ö¹¡¢Ïú»Ù¡£

Ëü°üÀ¨ÒÔϳ£Óù«¹²ÊôÐÔ£º

2.1.1 Ï̵߳ıêʶ·û

ManagedThreadIdÊÇÈ·ÈÏÏ̵߳ÄΨһ±êʶ·û£¬³ÌÐòÔڴ󲿷ÖÇé¿ö϶¼ÊÇͨ¹ýThread.ManagedThreadIdÀ´±æ±ðÏ̵߳ġ£¶øNameÊÇÒ»¸ö¿É±äÖµ£¬ÔÚĬÈÏʱºò£¬NameΪһ¸ö¿ÕÖµ Null£¬¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ý³ÌÐòÉèÖÃÏ̵߳ÄÃû³Æ£¬µ«ÕâÖ»ÊÇÒ»¸ö¸¨Öú¹¦ÄÜ¡£

2.1.2 Ï̵߳ÄÓÅÏȼ¶±ð

.NETΪÏß³ÌÉèÖÃÁËPriorityÊôÐÔÀ´¶¨ÒåÏß³ÌÖ´ÐеÄÓÅÏȼ¶±ð£¬ÀïÃæ°üº¬5¸öÑ¡ÏÆäÖÐNormalÊÇĬÈÏÖµ¡£³ý·ÇϵͳÓÐÌØÊâÒªÇ󣬷ñÔò²»Ó¦¸ÃËæ±ãÉèÖÃÏ̵߳ÄÓÅÏȼ¶±ð

2.1.3 Ï̵߳Ä״̬

ͨ¹ýThreadState¿ÉÒÔ¼ì²âÏß³ÌÊÇ´¦ÓÚUnstarted¡¢Sleeping¡¢Running µÈµÈ״̬£¬Ëü±È IsAlive ÊôÐÔÄÜÌṩ¸ü¶àµÄÌØ¶¨ÐÅÏ¢¡£

Ç°ÃæËµ¹ý£¬Ò»¸öÓ¦ÓóÌÐòÓòÖпÉÄܰüÀ¨¶à¸öÉÏÏÂÎÄ£¬¶øÍ¨¹ýCurrentContext¿ÉÒÔ»ñÈ¡Ï̵߳±Ç°µÄÉÏÏÂÎÄ¡£

CurrentThreadÊÇ×î³£ÓõÄÒ»¸öÊôÐÔ£¬ËüÊÇÓÃÓÚ»ñÈ¡µ±Ç°ÔËÐеÄÏ̡߳£

2.1.4 System.Threading.ThreadµÄ·½·¨

Thread ÖаüÀ¨Á˶à¸ö·½·¨À´¿ØÖÆÏ̵߳Ĵ´½¨¡¢¹ÒÆð¡¢Í£Ö¹¡¢Ïú»Ù£¬ÒÔºóÀ´µÄÀý×ÓÖлᾭ³£Ê¹Óá£

2.1.5 ¿ª·¢ÊµÀý

ÒÔÏÂÕâ¸öÀý×Ó£¬¾ÍÊÇͨ¹ýThreadÏÔʾµ±Ç°Ïß³ÌÐÅÏ¢

static void Main(string[] args)
{
Thread thread = Thread.CurrentThread;
thread.Name = "Main Thread";
string threadMessage = string.Format("Thread ID:{0}\n Current AppDomainId:{1}\n "+
"Current ContextId:{2}\n Thread Name:{3}\n "+
"Thread State:{4}\n Thread Priority:{5}\n",
thread.ManagedThreadId, Thread.GetDomainID(), Thread.CurrentContext.ContextID,
thread.Name, thread.ThreadState, thread.Priority);
Console.WriteLine(threadMessage);
Console.ReadKey();
}

ÔËÐнá¹û

2.2 System.Threading ÃüÃû¿Õ¼ä

ÔÚSystem.ThreadingÃüÃû¿Õ¼äÄÚÌṩ¶à¸ö·½·¨À´¹¹½¨¶àÏß³ÌÓ¦ÓóÌÐò,ÆäÖÐThreadPoolÓëThreadÊǶàÏ߳̿ª·¢ÖÐ×î³£Óõ½µÄ£¬ÔÚ.NETÖÐרÃÅÉ趨ÁËÒ»¸öCLRÏ̳߳Ø×¨ÃÅÓÃÓÚ¹ÜÀíÏ̵߳ÄÔËÐУ¬Õâ¸öCLRÏ̳߳ØÕýÊÇͨ¹ýThreadPoolÀàÀ´¹ÜÀí¡£¶øThreadÊǹÜÀíÏ̵߳Ä×îÖ±½Ó·½Ê½£¬ÏÂÃæ¼¸½Ú½«Ïêϸ½éÉÜÓйØÄÚÈÝ¡£

ÔÚSystem.ThreadingÖеİüº¬ÁËϱíÖеĶà¸ö³£ÓÃίÍУ¬ÆäÖÐThreadStart¡¢ParameterizedThreadStartÊÇ×î³£Óõ½µÄίÍС£

ÓÉThreadStartÉú³ÉµÄÏß³ÌÊÇ×îÖ±½ÓµÄ·½Ê½£¬µ«ÓÉThreadStartËùÉú³É²¢²»ÊÜÏ̳߳عÜÀí¡£

¶øParameterizedThreadStartÊÇΪÒì²½´¥·¢´ø²ÎÊýµÄ·½·¨¶øÉèµÄ£¬ÔÚÏÂÒ»½Ú½«Îª´ó¼ÒÖðһϸ˵¡£

2.3 Ï̵߳ĹÜÀí·½Ê½

ͨ¹ýThreadStartÀ´´´½¨Ò»¸öÐÂÏß³ÌÊÇ×îÖ±½ÓµÄ·½·¨£¬µ«ÕâÑù´´½¨³öÀ´µÄÏ̱߳ȽÏÄѹÜÀí£¬Èç¹û´´½¨¹ý¶àµÄÏ̷߳´¶ø»áÈÃϵͳµÄÐÔÄÜÏÂÔØ¡£Óмû¼°´Ë£¬.NETΪÏ̹߳ÜÀíרÃÅÉèÖÃÁËÒ»¸öCLRÏ̳߳أ¬Ê¹ÓÃCLRÏ̳߳ØÏµÍ³¿ÉÒÔ¸üºÏÀíµØ¹ÜÀíÏ̵߳ÄʹÓá£ËùÓÐÇëÇóµÄ·þÎñ¶¼ÄÜÔËÐÐÓÚÏ̳߳ØÖУ¬µ±ÔËÐнáÊøÊ±Ï̱߳ã»á»Ø¹éµ½Ï̳߳ء£Í¨¹ýÉèÖã¬ÄÜ¿ØÖÆÏ̳߳صÄ×î´óÏß³ÌÊýÁ¿£¬ÔÚÇëÇ󳬳öÏß³Ì×î´óֵʱ£¬Ï̳߳ØÄܰ´ÕÕ²Ù×÷µÄÓÅÏȼ¶±ðÀ´Ö´ÐУ¬Èò¿·Ö²Ù×÷´¦Óڵȴý״̬£¬´ýÓÐÏ̻߳عéʱÔÙÖ´ÐвÙ×÷¡£

»ù´¡ÖªÊ¶¾ÍΪ´ó¼Ò½éÉܵ½ÕâÀÏÂÃæ½«Ïêϸ½éÉܶàÏ̵߳Ŀª·¢¡£

Èý¡¢ÒÔThreadStart·½Ê½ÊµÏÖ¶àÏß³Ì

3.1 ʹÓÃThreadStartίÍÐ

ÕâÀïÏÈÒÔÒ»¸öÀý×ÓÌåÏÖһ϶àÏ̴߳øÀ´µÄºÃ´¦£¬Ê×ÏÈÔÚMessageÀàÖн¨Á¢Ò»¸ö·½·¨ShowMessage()£¬ÀïÃæÏÔʾÁ˵±Ç°ÔËÐÐÏ̵߳ÄId£¬²¢Ê¹ÓÃThread.Sleep£¨int ) ·½·¨Ä£Äⲿ·Ö¹¤×÷¡£ÔÚmain()ÖÐͨ¹ýThreadStartίÍаó¶¨Message¶ÔÏóµÄShowMessage£¨£©·½·¨£¬È»ºóͨ¹ýThread.Start£¨£©Ö´ÐÐÒì²½·½·¨¡£

public class Message
{
public void ShowMessage()
{
string message = string.Format("Async threadId is :{0}",
Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);

for (int n = 0; n < 10; n++)
{
Thread.Sleep(300);
Console.WriteLine("The number is:" + n.ToString());
}
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main threadId is:"+
Thread.CurrentThread.ManagedThreadId);
Message message=new Message();
Thread thread = new Thread(new ThreadStart(message.ShowMessage));
thread.Start();
Console.WriteLine("Do something ..........!");
Console.WriteLine("Main thread working is complete!");

}
}

Çë×¢ÒâÔËÐнá¹û£¬ÔÚµ÷ÓÃThread.Start()·½·¨ºó£¬ÏµÍ³ÒÔÒì²½·½Ê½ÔËÐÐMessage.ShowMessage()£¬¶øÖ÷Ï̵߳IJÙ×÷ÊǼÌÐøÖ´Ðеģ¬ÔÚMessage.ShowMessage()Íê³Éǰ£¬Ö÷Ïß³ÌÒÑÍê³ÉËùÓеIJÙ×÷¡£

3.2 ʹÓÃParameterizedThreadStartίÍÐ

ParameterizedThreadStartίÍÐÓëThreadStartίÍзdz£ÏàËÆ£¬µ«ParameterizedThreadStartίÍÐÊÇÃæÏò´ø²ÎÊý·½·¨µÄ¡£×¢ÒâParameterizedThreadStart ¶ÔÓ¦·½·¨µÄ²ÎÊýΪobject£¬´Ë²ÎÊý¿ÉÒÔΪһ¸öÖµ¶ÔÏó£¬Ò²¿ÉÒÔΪһ¸ö×Ô¶¨Òå¶ÔÏó¡£

public class Person
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}

public class Message
{
public void ShowMessage(object person)
{
if (person != null)
{
Person _person = (Person)person;
string message = string.Format("\n{0}'s age is {1}!\nAsync threadId is:{2}",
_person.Name,_person.Age,Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);
}
for (int n = 0; n < 10; n++)
{
Thread.Sleep(300);
Console.WriteLine("The number is:" + n.ToString());
}
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main threadId is:"+Thread.CurrentThread.ManagedThreadId);

Message message=new Message();
//°ó¶¨´ø²ÎÊýµÄÒì²½·½·¨
Thread thread = new Thread(new ParameterizedThreadStart(message.ShowMessage));
Person person = new Person();
person.Name = "Jack";
person.Age = 21;
thread.Start(person); //Æô¶¯Òì²½Ïß³Ì

Console.WriteLine("Do something ..........!");
Console.WriteLine("Main thread working is complete!");

}
}

ÔËÐнá¹û£º

3.3 ǰ̨Ïß³ÌÓëºǫ́Ïß³Ì

×¢ÒâÒÔÉÏÁ½¸öÀý×Ó¶¼Ã»ÓÐʹÓÃConsole.ReadKey£¨£©,µ«ÏµÍ³ÒÀÈ»»áµÈ´ýÒì²½Ïß³ÌÍê³Éºó²Å»á½áÊø¡£ÕâÊÇÒòΪʹÓÃThread.Start()Æô¶¯µÄÏß³ÌĬÈÏΪǰ̨Ị̈߳¬¶øÏµÍ³±ØÐëµÈ´ýËùÓÐǰ̨Ïß³ÌÔËÐнáÊøºó£¬Ó¦ÓóÌÐòÓò²Å»á×Ô¶¯Ð¶ÔØ¡£

ÔÚµÚ¶þ½ÚÔø¾­½éÉܹýÏß³ÌThreadÓÐÒ»¸öÊôÐÔIsBackground£¬Í¨¹ý°Ñ´ËÊôÐÔÉèÖÃΪtrue£¬¾Í¿ÉÒÔ°ÑÏß³ÌÉèÖÃΪºǫ́Ị̈߳¡ÕâʱӦÓóÌÐòÓò½«ÔÚÖ÷Ïß³ÌÍê³Éʱ¾Í±»Ð¶ÔØ£¬¶ø²»»áµÈ´ýÒì²½Ï̵߳ÄÔËÐС£

3.4 ¹ÒÆðÏß³Ì

ΪÁ˵ȴýÆäËûºǫ́Ïß³ÌÍê³ÉºóÔÙ½áÊøÖ÷Ị̈߳¬¾Í¿ÉÒÔʹÓÃThread.Sleep()·½·¨¡£

public class Message
{
public void ShowMessage()
{
string message = string.Format("\nAsync threadId is:{0}",
Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);
for (int n = 0; n < 10; n++)
{
Thread.Sleep(300);
Console.WriteLine("The number is:" + n.ToString());
}
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main threadId is:"+
Thread.CurrentThread.ManagedThreadId);

Message message=new Message();
Thread thread = new Thread(new ThreadStart(message.ShowMessage));
thread.IsBackground = true;
thread.Start();

Console.WriteLine("Do something ..........!");
Console.WriteLine("Main thread working is complete!");
Console.WriteLine("Main thread sleep!");
Thread.Sleep(5000);
}
}

ÔËÐнá¹ûÈçÏ£¬´ËʱӦÓóÌÐòÓò½«ÔÚÖ÷Ïß³ÌÔËÐÐ5Ãëºó×Ô¶¯½áÊø

µ«ÏµÍ³ÎÞ·¨Ô¤ÖªÒì²½Ïß³ÌÐèÒªÔËÐеÄʱ¼ä£¬ËùÒÔÓÃͨ¹ýThread.Sleep£¨int£©×èÈûÖ÷Ï̲߳¢²»ÊÇÒ»¸öºÃµÄ½â¾ö·½·¨¡£Óмû¼°´Ë£¬.NETרÃÅΪµÈ´ýÒì²½Ïß³ÌÍê³É¿ª·¢ÁËÁíÒ»¸ö·½·¨thread.Join()¡£°ÑÉÏÃæÀý×ÓÖеÄ×îºóÒ»ÐÐThread.Sleep£¨5000£©ÐÞ¸ÄΪ thread.Join() ¾ÍÄܱ£Ö¤Ö÷Ïß³ÌÔÚÒì²½Ïß³ÌthreadÔËÐнáÊøºó²Å»áÖÕÖ¹¡£

3.5 Suspend Óë Resume £¨É÷Óã©

Thread.Suspend£¨£©Óë Thread.Resume£¨£©ÊÇÔÚFramework1.0 ¾ÍÒѾ­´æÔÚµÄÀÏ·½·¨ÁË£¬ËüÃÇ·Ö±ð¿ÉÒÔ¹ÒÆð¡¢»Ö¸´Ï̡߳£µ«ÔÚFramework2.0ÖоÍÒѾ­Ã÷È·ÅųâÕâÁ½¸ö·½·¨¡£ÕâÊÇÒòΪһµ©Ä³¸öÏß³ÌÕ¼ÓÃÁËÒÑÓеÄ×ÊÔ´£¬ÔÙʹÓÃSuspend£¨£©Ê¹Ï̳߳¤ÆÚ´¦ÓÚ¹ÒÆð״̬£¬µ±ÔÚÆäËûÏ̵߳÷ÓÃÕâЩ×ÊÔ´µÄʱºò¾Í»áÒýÆðËÀËø£¡ËùÒÔÔÚûÓбØÒªµÄÇé¿öÏÂÓ¦¸Ã±ÜÃâʹÓÃÕâÁ½¸ö·½·¨¡£

3.6 ÖÕÖ¹Ïß³Ì

ÈôÏëÖÕÖ¹ÕýÔÚÔËÐеÄỊ̈߳¬¿ÉÒÔʹÓÃAbort£¨£©·½·¨¡£ÔÚʹÓÃAbort£¨£©µÄʱºò£¬½«Òý·¢Ò»¸öÌØÊâÒì³£ ThreadAbortException ¡£
ÈôÏëÔÚÏß³ÌÖÕֹǰ»Ö¸´Ï̵߳ÄÖ´ÐУ¬¿ÉÒÔÔÚ²¶»ñÒì³£ºó ,ÔÚcatch£¨ThreadAbortException ex£©{...} Öе÷ÓÃThread.ResetAbort£¨£©È¡ÏûÖÕÖ¹¡£

¶øÊ¹ÓÃThread.Join£¨£©¿ÉÒÔ±£Ö¤Ó¦ÓóÌÐòÓòµÈ´ýÒì²½Ï߳̽áÊøºó²ÅÖÕÖ¹ÔËÐС£

static void Main(string[] args)
{
Console.WriteLine("Main threadId is:" +
Thread.CurrentThread.ManagedThreadId);

Thread thread = new Thread(new ThreadStart(AsyncThread));
thread.IsBackground = true;
thread.Start();
thread.Join();

}

//ÒÔÒì²½·½Ê½µ÷ÓÃ
static void AsyncThread()
{
try
{
string message = string.Format("\nAsync threadId is:{0}",
Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);

for (int n = 0; n < 10; n++)
{
//µ±nµÈÓÚ4ʱ£¬ÖÕÖ¹Ïß³Ì
if (n >= 4)
{
Thread.CurrentThread.Abort(n);
}
Thread.Sleep(300);
Console.WriteLine("The number is:" + n.ToString());
}
}
catch (ThreadAbortException ex)
{
//Êä³öÖÕÖ¹Ïß³ÌʱnµÄÖµ
if (ex.ExceptionState != null)
Console.WriteLine(string.Format("Thread abort when the number is: {0}!",
ex.ExceptionState.ToString()));

//È¡ÏûÖÕÖ¹£¬¼ÌÐøÖ´ÐÐÏß³Ì
Thread.ResetAbort();
Console.WriteLine("Thread ResetAbort!");
}

//Ï߳̽áÊø
Console.WriteLine("Thread Close!");
}

ÔËÐнá¹ûÈçÏÂ

ËÄ¡¢CLRÏ̳߳صŤ×÷ÕßÏß³Ì

4.1 ¹ØÓÚCLRÏ̳߳Ø

ʹÓÃThreadStartÓëParameterizedThreadStart½¨Á¢ÐÂÏ̷߳dz£¼òµ¥£¬µ«Í¨¹ý´Ë·½·¨½¨Á¢µÄÏß³ÌÄÑÓÚ¹ÜÀí£¬Èô½¨Á¢¹ý¶àµÄÏ̷߳´¶ø»áÓ°ÏìϵͳµÄÐÔÄÜ¡£

Óмû¼°´Ë£¬.NETÒýÈëCLRÏ̳߳ØÕâ¸ö¸ÅÄî¡£CLRÏ̳߳ز¢²»»áÔÚCLR³õʼ»¯µÄʱºòÁ¢¿Ì½¨Á¢Ị̈߳¬¶øÊÇÔÚÓ¦ÓóÌÐòÒª´´½¨Ïß³ÌÀ´Ö´ÐÐÈÎÎñʱ£¬Ï̳߳زųõʼ»¯Ò»¸öÏ̡߳£Ï̵߳ijõʼ»¯ÓëÆäËûµÄÏß³ÌÒ»Ñù¡£ÔÚÍê³ÉÈÎÎñÒԺ󣬸ÃÏ̲߳»»á×ÔÐÐÏú»Ù£¬¶øÊÇÒÔ¹ÒÆðµÄ״̬·µ»Øµ½Ï̳߳ء£Ö±µ½Ó¦ÓóÌÐòÔÙ´ÎÏòÏ̳߳ط¢³öÇëÇóʱ£¬Ï̳߳ØÀï¹ÒÆðµÄÏ߳̾ͻáÔٶȼ¤»îÖ´ÐÐÈÎÎñ¡£ÕâÑù¼È½ÚÊ¡Á˽¨Á¢Ïß³ÌËùÔì³ÉµÄÐÔÄÜËðºÄ£¬Ò²¿ÉÒÔÈöà¸öÈÎÎñ·´¸´ÖØÓÃͬһỊ̈߳¬´Ó¶øÔÚÓ¦ÓóÌÐòÉú´æÆÚÄÚ½ÚÔ¼´óÁ¿¿ªÏú¡£

   
2776 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ


.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield


ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹