伸进女同桌乳沟里摸爽了,小雪解开乳罩给老杨摸,少妇被按摩师摸高潮了,亲嘴扒胸摸屁股激烈视频,强摸秘书人妻大乳BD,摸BBB揉BBB揉BBB视频

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> .Net技術(shù) >> 文章正文

教程:.Net多線程和Windows Forms編程

1 UI線程執(zhí)行耗時操作  UI線程被阻塞 無法響應(yīng)窗體消息隊列中的其他消息。

2 非UI線程修改UI屬性 由于窗體資源也屬于臨界資源 所以有互斥訪問的機(jī)制。

3 線程的同步問題 線程A等待線程B執(zhí)行完畢后才能開始執(zhí)行。

問題1的解決方法:
解決方法只有一種,就是開啟新線程執(zhí)行耗時操作,使原界面線程仍能夠響應(yīng)窗體消息隊列中的用戶消息及系統(tǒng)消息。

開啟新線程的方式有以下各種:
1) 使用System.Threading.Thread類與System.Threading.ThreadStart委托或System.Threading.ParameterizedThreadStart委托來實現(xiàn)開啟新線程。
ThreadStart委托的類型: void ThreadStart(void);
ParameterizedThreadStart委托的類型: void ParameterizedThreadStart(object[]);

ThreadStart委托可以指向一個無參數(shù)無返回值的方法。
ParameterizedThreadStart委托可以指向一個有參數(shù)無返回值的方法。

Thread類實例化的時候可以向構(gòu)造函數(shù)傳入ThreadStart委托的實例或ParameterizedThreadStart委托的實例,然后使用Thread.Start()以異步方式調(diào)用一個方法。

2) 為需要異步執(zhí)行的耗時方法定義一個委托,使用該委托的實例的BeginInvoke方法來異步調(diào)用該方法,BeginInvoke方法附帶了AsyncCallback類型的回調(diào)函數(shù)委托以及object類型的參數(shù)。
然后可以在AsyncCallback類型的回調(diào)函數(shù)中使用EndInvoke方法來得到異步方法的返回值。

3) 可以使用System.Timers.Timer定時器類來實現(xiàn)在新線程中執(zhí)行耗時操作,System.Timers.Timer定時器不同于System.Windows.Forms.Timer定時器,System.Timers.Timer定時器的定時事件的響應(yīng)函數(shù)并不是在調(diào)用定時器Start方法的線程中去執(zhí)行。

4) 可以使用BackgroundWorker組件來實現(xiàn)在新線程中執(zhí)行耗時操作(通過訂閱DoWork事件).


問題2的解決方法
以下代碼是.NetFramework 2.0類庫中避免多線程修改界面造成的臨界資源死鎖問題的代碼。
System.Windows.Forms.Control.get_Handle方法的內(nèi)部實現(xiàn)

public IntPtr get_Handle()
{
    if ((checkForIllegalCrossThreadCalls && !inCrossThreadSafeCall) && this.InvokeRequired)
    {
        throw new InvalidOperationException(SR.GetString("IllegalCrossThreadCall", new object[] { this.Name }));
    }
    if (!this.IsHandleCreated)
    {
        this.CreateHandle();
    }
    return this.HandleInternal;
}



在修改每個控件的屬性的時候,都會先調(diào)用get_Handle方法獲取一個操作句柄,在該方法內(nèi)部會判斷Control類的靜態(tài)成員CheckForIllegalCrossThreadCalls的值(該成員用來表示是否啟用安全模式,安全模式的意思就是禁止跨線程修改界面屬性來避免多線程訪問臨界資源死鎖的問題),第二個判斷的屬性是InvokeRequired屬性(該屬性用來表示當(dāng)前方法是否是在跨線程調(diào)用)。 所以我們可以通過修改CheckForIllegalCrossThreadCalls屬性為False來關(guān)閉安全模式,但有可能造成線程死鎖問題。

解決方法只有兩個
1) 設(shè)置CheckForIllegalCrossThreadCalls屬性為False,關(guān)閉.net的安全模式,在對界面屬性修改的代碼加上lock,來實現(xiàn)同一時間僅有一個線程修改界面屬性。
2) 在設(shè)置界面屬性的方法中詢問InvokeRequired屬性,如果是非界面線程修改界面屬性,則讓界面線程來調(diào)用設(shè)置界面屬性的方法。(這個方法是MSDN實例中慣用的方法,也是BackgroundWorker等組件的內(nèi)部實現(xiàn)方式)


推薦大家使用BackgroundWorker來實現(xiàn)耗時操作的輔助線程以及跨線程修改界面屬性等操作,關(guān)于BackgroundWorker的具體使用方法見 一日一練 之 BackgroundWorker

作者:未知 | 文章來源:自學(xué)編程網(wǎng) | 更新時間:2007-12-29 12:38:59

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    j2se 嵌入式腳本抓取引擎
    NET Framework 2.0 Service Pack 2下載地址
    Java語言學(xué)習(xí):jAVA中 的多線程淺析
    解析.NET中的6各大的安全錯誤
    java多線程SOCKET程序的問題
    .NET中Boolean,bool以及String,string之間的區(qū)別
    在VC 程序中自定義Vista事件日志
    .Net FrameWork 2.0 新增功能 Bulk Copy
    多線程技術(shù)在.net中是如何應(yīng)用的
    C++函數(shù)對象count_if
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·.net技術(shù) asp.net MVC3 Vi
    ·.net將視頻文件格式轉(zhuǎn)換成
    ·NET Framework 2.0 Servic
    ·如何動態(tài)修改winform的app
    ·asp,net軟件結(jié)構(gòu)設(shè)計和相關(guān)
    ·學(xué)習(xí)怎樣使用ASP.NET中的虛
    ·,net基礎(chǔ)類的學(xué)習(xí):system
    ·.net學(xué)習(xí):c#事件的深入分
    ·Facade Pattern學(xué)習(xí)總結(jié)
    ·C#如何設(shè)置或者獲取目錄的
    ·如何使用XSL來定義ASP.NET
    ·理解WCF Data Contract契約
    ·如何能在.net2.0開發(fā)的控件
    ·模式怎樣使用,講解模式的
    ·如何解決Menu菜單被frame遮
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.zgna.net All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    亚东县| 手机| 平陆县| 富源县| 佛教| 伽师县| 翼城县| 太仓市| 江永县| 道孚县| 乐都县| 炉霍县| 定西市| 沾化县| 汝城县| 诸城市| 肇源县| 岚皋县| 桐城市| 恭城| 交口县| 扬州市| 宁陕县| 蛟河市| 神农架林区| 方正县| 梁河县| 乌兰浩特市| 封开县| 桐乡市| 平乐县| 红河县| 确山县| 南岸区| 吉首市| 民县| 都匀市| 平江县| 大港区| 崇阳县| 本溪|