C#关于线程的问题

1、通过System.threading.Thread类可以创建新的线程,并在线程堆栈中运行静态和动态的实例,可以通过Thread类的构造方法传递一个无参数,并且不返回的委托,

  class Program

    {
          public static void myStaticThreadMethod(){
              Console.WriteLine("myStaticThrteadMethod");
            }
          public void myThreadMethod() {
              Console.WriteLine("myThreadMethod");
          }
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(myStaticThreadMethod);
            thread1.Start();//只有调用Start方法,线程才会启用
            //Thread thread1 = new Thread(MyThread);
            Thread thread2 = new Thread(new Program().myThreadMethod);
            thread2.Start();
            Thread thread3 = new Thread(delegate() { Console.WriteLine("niming weituo"); });
            thread3.Start();
            Thread thread4 = new Thread(() => { Console.WriteLine("Lambda biaodashi"); });
            thread4.Start();
            //Console.WriteLine("{0}", thread3.GetHashCode);
            Console.ReadKey();
          
        }
    }

2、定义一个线程类

  

3、Thread 类有一个带参数的委托的重载形式,这个委托定义如下:

     

class NewThread : MyThread 
    private String p1; 
    private int p2; 
    public NewThread(String p1, int p2) 
    
        this.p1 = p1; 
        this.p2 = p2; 
    
  
    override public void run() 
    
        Console.WriteLine(p1); 
        Console.WriteLine(p2); 
    
  
NewThread newThread = new NewThread("hello world", 4321); 
newThread.start(); 
4、线程计数器
     使用join方法只有在线程结束时候才会执行下面的语句,可以对每一个线程调用join方法,这个调用要在另一个线程中,不能在主线程中,不然会阻塞。
5、通过委托来实现异步调用
     class Program
    {
        static void Main(string[] args)
        {
            String i = "canshu";
            Console.WriteLine("调用异步方法前");
            PostAsync(i);
            Console.WriteLine("调用异步方法后");
            Console.ReadKey();

        }
        delegate void AsyncFoo(String i);
        private static void PostAsync(object i) {
            AsyncFoo caller = Myfucn;
            caller.BeginInvoke(i.ToString(), FooCallBack, caller);

        }
        private static void FooCallBack(IAsyncResult ar) {
            var caller = (AsyncFoo)ar.AsyncState;
            caller.EndInvoke(ar);
        }
        private static void Myfucn(String i) {
            Console.WriteLine("tonguo weituo shixian");
        }
    }
   
 
 
posted @ 2018-10-22 07:51  疏桐  阅读(184)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();