最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#通過接口與線程通信(捕獲線程狀態(tài))示例代碼

 更新時間:2013年12月02日 11:05:08   作者:  
本文介紹C#通過接口與線程通信(捕獲線程狀態(tài)),并提供簡單的示例代碼供參考

提示:本文所提到的線程狀態(tài)變化,并不是指線程啟動、暫停、停止,而是說線程內(nèi)部狀態(tài)的遷移。隨著軟件技術不斷發(fā)展,用戶需求不斷提升,多線程的重要性日益凸顯。

關于線程,通俗的講,每當啟動一個exe應用程序,都會創(chuàng)建一個進程和一個主線程,主線程用來處理界面繪制、界面事件響應等工作,而進程則是線程的容器,主線程和用戶創(chuàng)建的新線程,都將在相應的進程中維護。由此可知,一個程序之所以能工作,是線程的功勞,進程僅僅是容器而已,一旦程序的主線程被阻塞,就會造成界面無響應等現(xiàn)象,這時候就要用多線程解決問題。然而,在程序中使用多線程,是比較頭疼的一件事。以我的體會,多線程首先會造成程序不穩(wěn)定,處理不好容易導致程序崩潰。其次,多線程控制并不是那么容易,比如線程狀態(tài)監(jiān)控、線程訪問沖突等等。最后,還有一個線程通信問題,線程和線程之間的數(shù)據(jù)交互、消息通知等,并不是那么容易,往往涉及高級知識,比如委托。很多情況下,我們希望能獲得線程的“返回值”,也就是能夠獲得線程中的數(shù)據(jù),當線程內(nèi)部狀態(tài)發(fā)生改變時,我們能及時獲取關鍵數(shù)據(jù),來進行不同的處理。遺憾的是,線程是沒有返回值的,在線程中運行的方法,返回值必須是void,但可以有參數(shù)。本文就從這個角度出發(fā),通過一個簡單的小技巧,及時捕獲線程狀態(tài)變化,并且獲得關鍵數(shù)據(jù)。

簡單的解釋一下,核心思想:通過定義接口,來規(guī)范線程參數(shù),當線程內(nèi)部狀態(tài)遷移時,調(diào)用接口中定義的對應處理方法,達到捕獲線程狀態(tài)的目的,同時也能獲得線程內(nèi)部關鍵數(shù)據(jù)。

代碼實現(xiàn)如下:

winform窗體中的代碼(對應線程相關類):

復制代碼 代碼如下:

using System.Threading;

 ///羅旭成
 ///2013-11-14
 /// <summary>

 /// 響應開始按鈕單擊事件
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnStart_Click(object sender, EventArgs e)
 {
     //實例化ThreadNotice類對象,ThreadNotice類實現(xiàn)了IThreadNotice接口
     IThreadNotice tn = new ThreadNotice();
     //實例化一個Thread對象,并且指定該Thread對象執(zhí)行Run方法
     Thread th = new Thread(Run);
     //啟動線程,并且傳入線程方法(Run)需要的一個參數(shù)
     //注意,這里最多能傳入一個參數(shù)?。〔⑶乙缶€程方法的參數(shù)為Object類型??!
     th.Start(tn);
 }

 //線程中運行的方法
 void Run(Object obj)
 {
     //將對象轉(zhuǎn)換成接口類型
     IThreadNotice tn = (IThreadNotice)obj;
     //假設狀態(tài)為1,則調(diào)用實現(xiàn)IThreadNotice接口類的狀態(tài)1處理方法,并傳入狀態(tài)1下的數(shù)據(jù)
    tn.ThreadEvent1("狀態(tài)1");
     //假設為狀態(tài)2,則調(diào)用實現(xiàn)IThreadNotice接口類的狀態(tài)2處理方法,并傳入狀態(tài)2下的數(shù)據(jù)
     tn.ThreadEvent2("狀態(tài)2");
 }

線程狀態(tài)處理接口:

復制代碼 代碼如下:

///羅旭成
///2013-11-14
//線程狀態(tài)通知接口
 public interface IThreadNotice
 {
     //狀態(tài)1處理方法
     void ThreadEvent1(string msg);
     //狀態(tài)2處理方法
     void ThreadEvent2(string msg);
 }

狀態(tài)處理類:

復制代碼 代碼如下:

using System.Diagnostics;

///羅旭成
///2013-11-14
//ThreadNotice類實現(xiàn)了IThreadNotice接口
 public class ThreadNotice:IThreadNotice
 {
     //ThreadNotice類對于狀態(tài)1的處理
     public void ThreadEvent1(string msg)
    {
         Debug.WriteLine("ThreadNotice類處理——" + msg);
     }


     //ThreadNotice類對于狀態(tài)2的處理
     public void ThreadEvent2(string msg)
     {
         Debug.WriteLine("ThreadNotice類處理——" + msg);
     }
 }



相信大家已經(jīng)看出,此方法只能達到捕獲、處理線程狀態(tài)的效果,并不能把線程中的數(shù)據(jù)返回。也就是說,雖然我們捕獲了線程狀態(tài),獲取了關鍵數(shù)據(jù),但這仍然是一種向下的深層調(diào)用,并沒有向上層返回。比如,做不到把線程中的數(shù)據(jù)顯示在界面上,那將用到委托技術。

相關文章

  • c# dynamic的好處

    c# dynamic的好處

    這篇文章主要介紹了c# dynamic的好處,以示例代碼幫助大家更好的了解和學習,感興趣的朋友可以了解下
    2020-12-12
  • C#實現(xiàn)遞歸調(diào)用的Lambda表達式

    C#實現(xiàn)遞歸調(diào)用的Lambda表達式

    這篇文章介紹了C#實現(xiàn)遞歸調(diào)用的Lambda表達式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# 設計模式系列教程-觀察者模式

    C# 設計模式系列教程-觀察者模式

    將一個系統(tǒng)分割成一個一些類相互協(xié)作的類有一個不好的副作用,那就是需要維護相關對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴展和重用都帶來不便。觀察者就是解決這類的耦合關系的。
    2016-06-06
  • c#中將uint值轉(zhuǎn)換成int的實例方法

    c#中將uint值轉(zhuǎn)換成int的實例方法

    在本文里小編給大家整理的是關于c#中將uint值轉(zhuǎn)換成int的實例方法,需要的朋友們學習參考下。
    2019-08-08
  • C#實現(xiàn)的序列化通用類實例

    C#實現(xiàn)的序列化通用類實例

    這篇文章主要介紹了C#實現(xiàn)的序列化通用類,實例分析了C#序列化與反序列化操作相關技巧,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)自由組合本地緩存、分布式緩存和數(shù)據(jù)查詢

    C#實現(xiàn)自由組合本地緩存、分布式緩存和數(shù)據(jù)查詢

    這篇文章介紹了C#實現(xiàn)本地緩存、分布式緩存和數(shù)據(jù)查詢的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#SuperSocket的搭建并配置啟動總結(jié)

    C#SuperSocket的搭建并配置啟動總結(jié)

    在本篇文章里我們給大家總結(jié)了關于C#SuperSocket的搭建并配置啟動的相關內(nèi)容,正在學習的朋友們跟著參考下。
    2019-05-05
  • C#正則表達式之Ismatch()的用法解讀

    C#正則表達式之Ismatch()的用法解讀

    這篇文章主要介紹了C#正則表達式之Ismatch()的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 基于XSLT調(diào)試的相關問題

    基于XSLT調(diào)試的相關問題

    本篇文章是對XSLT調(diào)試的相關問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • WinForm調(diào)用jar包的方法分析

    WinForm調(diào)用jar包的方法分析

    這篇文章主要介紹了WinForm調(diào)用jar包的方法,結(jié)合實例形式分析了WinForm調(diào)用jar包的原理、實現(xiàn)技巧與相關注意事項,需要的朋友可以參考下
    2017-05-05

最新評論

和硕县| 双城市| 榆林市| 通化县| 肃宁县| 平和县| 宁陵县| 龙门县| 峡江县| 鸡西市| 五寨县| 苏尼特右旗| 上栗县| 涟水县| 绥滨县| 积石山| 大理市| 宜阳县| 安义县| 沧源| 建始县| 新竹市| 鄂尔多斯市| 都昌县| 边坝县| 红安县| 孝义市| 淳化县| 五河县| 道真| 黄山市| 茶陵县| 梅州市| 吴川市| 静宁县| 宜春市| 香港| 开平市| 望都县| 青阳县| 定陶县|