首页 > 学院 > 开发设计 > 正文

C#委派timer和线程以及GC

2019-11-14 16:00:38
字体:
来源:转载
供稿:网友
代码
Code highlighting PRoduced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//小张类
    public class MrZhang
    {
        //其实买车票的悲情人物是小张
        public static void BuyTicket()
        {
            Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
        }
public static void BuyMovieTicket()
        {
            Console.WriteLine("我去,自己泡妞,还要让我带电影票!");
        }
    }
//小明类
    class MrMing
    {
        //声明一个委托,其实就是个“命令”
        public delegate void BugTicketEventHandler();
public static void Main(string[] args)
        {
            //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票”
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);
//这时候委托被附上了具体的方法
            myDelegate();
            Console.ReadKey();
        }
    }
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); 
这是委托的声明方法, BugTicketEventHandler(委托的方法);委托的方法必须要加上,因为委托的构造函数是不为空的。
注:委托的参数和返回类型,都要和你要具体委托的方法要一致,例:
  public delegate void BugTicketEventHandler();

  public static void BuyTicket()
  {
   Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
  }

 

委托链:

myDelegate += MrZhang.BuyMovieTicket;

结束!


 

委托的用途和c++的函数指针相似,但还有提高. 可以把函数做参数传递在你有好几个函数,而又事先不知道改运行那个好时,就是典型的应用例子. 比如你要实现两操作数的加减乘除那就可以定义一个委托 四个函数具体用什么操作需要用户决定, 这时就可以再定义一个以委托作为参数的函数实现什么运算就把相应的函数传进去就行了

 

事件监听函数+=委托(需要执行函数)
在System.Timers.Timer中用到

关于timer 的三种形式
//1.实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。 
System.Windows.Forms.Timer 

// 2.提供以指定的时间间隔执行方法的机制。无法继承此类。 
System.Threading.Timer 

//3.在应用程序中生成定期事件。 
System.Timers.Timer 
下面两种应该是不同线程,无法直接使用form上面的控件
第二种的timer.dispose()结束有延迟,类似买早餐排队,当在最大早餐(线程达到)时,多次申请早餐(线程)会被记录,造成执行结束行为时,持续的资源消耗。
第三种的timer.stop()会取消申请,虽然有几个延迟,影响不大
所以,第一种不用申请线程,单线程会假死,第二和第三需要申请线程
写在最后吧。GC,垃圾回收装置 暂时不接触DLL,非冲突就用close和dispose吧,析构有可能会冲突GC,其实dispose如果不追求可能也没关系
需要注意的是在response的clear和end 第一个清理缓冲区,第二个结束js ?直接输出。
———————————————————————————————————————————————
不同线程之间的通讯
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
 
private void BeginListen()
        {
SetLabelEventHandler setLabelEventHandler = delegate() //匿名委托+Invoke
            {
                label1.Text = "我改变了它";
            };
            label1.Invoke(setLabelEventHandler);
}—————————————————————————————————————————————————
delegate和event
http://www.VEVb.com/shensr/archive/2005/11/24/283653.html

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表