zoukankan      html  css  js  c++  java
  • 调用C# Thread.Start()方法

      这里介绍调用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异常。

  • 相关阅读:
    查看变量是否删除在鼠标工具中用到了。
    poly 顶点坐标的函数
    out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] Error 1
    undefined reference to `pthread_mutexattr_destroy'
    [out/host/linuxx86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1
    can't find a register in class `GENERAL_REGS' while reloading `asm'
    error: ‘ptrdiff_t’ does not name a type
    armeabi4.4.3 引起的错误
    error: "_FORTIFY_SOURCE" redefined [Werror]
    :0:0: 错误: “_FORTIFY_SOURCE”重定义 [Werror]
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/1773633.html
Copyright © 2011-2022 走看看