歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C#多線程通信之委托(事件)

在研究C# 線程之間通信時,發現傳統的方法大概有三種

①全局變量,由於同一進程下的多個進程之間共享數據空間,所以使用全局變量是最簡單的方法,但要記住使用volatile進行限制。

②線程之間發送消息(這個隨後文章中會討論到)。

③ CEvent為MFC中的一個對象,可以通過對CEvent的觸發狀態進行改變,從而實現線程間的通信和同步,這個主要是實現線程直接同步的一種方法。

本文介紹的一種方法是這三種之外的一種方法,本文中實例是通過創建一個線程類,通過委托事件把值傳送到Form所在的類中,同時更新Form類中的一個控件(Label)中的值。

實現功能比較簡單,目的是實現此功能,先把代碼貼上:

MyThread.cs

  1. using System;  
  2. using System.Threading;  
  3.   
  4. namespace ThreadsComm  
  5. {  
  6.     public delegate void ReadParamEventHandler(string sParam);  
  7.     class MyThread  
  8.     {  
  9.         public Thread thread1;  
  10.         private static ReadParamEventHandler OnReadParamEvent;  
  11.         public MyThread()  
  12.         {  
  13.             thread1 = new Thread(new ThreadStart(MyRead));  
  14.             thread1.IsBackground = true;  
  15.             thread1.Start();  
  16.         }  
  17.         public event ReadParamEventHandler ReadParam  
  18.         {  
  19.             add { OnReadParamEvent += new ReadParamEventHandler(value);}  
  20.             remove{ OnReadParamEvent -= new ReadParamEventHandler(value);}  
  21.         }  
  22.         protected void MyRead()  
  23.         {  
  24.             int i = 0;  
  25.             while (true)  
  26.             {  
  27.                 Thread.Sleep(1000);  
  28.                 i = i + 1;  
  29.                 OnReadParamEvent(i.ToString());//觸發事件   
  30.             }  
  31.         }  
  32.     }  
  33. }  
其中的
  1. public event ReadParamEventHandler ReadParam  
  2.        {  
  3.            add { OnReadParamEvent += new ReadParamEventHandler(value);}  
  4.            remove{ OnReadParamEvent -= new ReadParamEventHandler(value);}  
  5.        }  

這個需要說明一下:

add 上下文關鍵字用於定義一個自定義事件訪問器,當客戶端代碼訂閱您的事件時將調用該訪問器。 如果提供自定義 add 訪問器,還必須提供 remove 訪問器。

remove 上下文關鍵字用於定義一個自定義事件訪問器,當客戶端代碼取消訂閱事件時將調用該訪問器。 如果提供自定義 remove 訪問器,還必須提供 add 訪問器。

Copyright © Linux教程網 All Rights Reserved