歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C#多線程通信之委托(事件)

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

日期:2017/3/1 10:19:39   编辑:Linux編程

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

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

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

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

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

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

MyThread.cs

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