分享

调用C# Thread.Start()方法 - 51CTO.COM

 ShangShujie 2010-05-27
    这里介绍调用C# Thread.Start()方法,在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart 理解为一个函数指针,指向线程要执行的函数。

     

    C#语言还是比较常见的东西,这里我们主要介绍调用C# Thread.Start()方法,包括介绍XX等方面。

    我们首先创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。(线程入口使程序知道该让这个线程干什么事)

    在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程 要执行的函数,当调用C# Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。

    打开你的VS.net,新建一个控制台应用程序(Console Application),编写完全控制一个线程的代码示例:

            
    1. using System;  
    2. using System.Threading;   
    3.  
    4. namespace ThreadTest  
    5. {  
    6. public class Alpha  
    7. {  
    8. public void Beta()  
    9. {  
    10. while (true)  
    11. {  
    12. Console.WriteLine("Alpha.Beta is running in its own thread.");  
    13. }  
    14. }  
    15. };   
    16.  
    17. public class Simple  
    18. {  
    19. public static int Main()  
    20. {  
    21. Console.WriteLine("Thread Start/Stop/Join Sample");  
    22. Alpha oAlpha = new Alpha();  
    23. file://这里创建一个线程,使之执行Alpha类的Beta()方法  
    24. Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));  
    25. oThread.Start();  
    26. while (!oThread.IsAlive)  
    27. Thread.Sleep(1);  
    28. oThread.Abort();  
    29. oThread.Join();  
    30. Console.WriteLine();  
    31. Console.WriteLine("Alpha.Beta has finished");   
    32. try   
    33. {  
    34. Console.WriteLine("Try to restart the Alpha.Beta thread");  
    35. oThread.Start();  
    36. }  
    37. catch (ThreadStateException)   
    38. {  
    39. Console.Write("ThreadStateException trying to restart Alpha.Beta. ");  
    40. Console.WriteLine("Expected since aborted threads cannot be restarted.");  
    41. Console.ReadLine();  
    42. }  
    43. return 0;  
    44. }  
    45. }  

    这段程序包含两个类Alpha和Simple,在创建线程oThread时我们用指向Alpha.Beta()方法的初始化了 ThreadStart代理(delegate)对象,当我们创建的线程oThread调用C# Thread.Start()方法启动时,实际上程序运行的是Alpha.Beta()方法:

            
    1. Alpha oAlpha = new Alpha();  
    2. Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));  
    3. oThread.Start();  

    然后在Main()函数的while循环中,我们使用静态方法Thread.Sleep()让主线程停了1ms,这段时间CPU转向执行线程 oThread。然后我们试图调用Thread.Abort()方法终止线程oThread,注意后面的 oThread.Join(),Thread.Join()方法使主线程等待,直到oThread线程结束。你可以给Thread.Join()方法指定 一个int型的参数作为等待的最长时间。之后,我们试图用C# Thread.Start()方法重新启动线程oThread,但是显然Abort()方法带来的后果是不可恢复的终止线程,所以最后程序会抛出 ThreadStateException异常。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多