C#委派 timer 和線程以及GC

來源:互聯網
上載者:User

標籤:

代碼
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.cnblogs.com/shensr/archive/2005/11/24/283653.html

C#委派 timer 和線程以及GC

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.