老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

C#中怎么實現(xiàn)多線程安全

C#中怎么實現(xiàn)多線程安全,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為桂平等服務(wù)建站,桂平等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為桂平企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

C#多線程控制進(jìn)度條之多線程安全的問題:我們知道 Windows 編程中有一個必須遵守的原則,那就是在一個窗體創(chuàng)建線程之外的任何線程中都不允許操作窗體。

我們上面的程序就是存在這樣的問題:工作線程是在 ShowProgress 方法中修改了用戶界面的進(jìn)度條的屬性。那為什么程序運行沒有出現(xiàn)問題,運行正常呢?

沒有發(fā)生問題是因為是現(xiàn)在的Windows XP操作系統(tǒng)對這類問題有非常健壯的解決方法,讓我們避免了問題的發(fā)生。但是我們現(xiàn)在的程序不能保證在其他的操作系統(tǒng)能夠運行正常!

真正的解決方法是我們能夠認(rèn)識到問題所在,并在程序中加以避免。

C#中怎么實現(xiàn)多線程安全

C#多線程控制進(jìn)度條之多線程安全圖

如何避免多線程的窗體資源訪問的安全問題呢?其實非常簡單,有兩種方法:

一種方法就是不管線程是否是用戶界面線程,對用戶界面資源的訪問統(tǒng)一由委托完成;

另一種方法是在每個 Windows Forms 用戶界面類中都有一個 InvokeRequired 屬性,它用來標(biāo)識當(dāng)前線程是否能夠直接訪問窗體資源。我們只需要檢查這個屬性的值,只有當(dāng)允許直接訪問窗體資源時才直接訪問相應(yīng)的資源,否則,就需要通過 委托進(jìn)行訪問了。

C#多線程控制進(jìn)度條之多線程安全實現(xiàn):

采用***種安全的方法的代碼片斷如下:

// 顯示進(jìn)度條的委托聲明  delegate void ShowProgressDelegate(   int totalStep, int currentStep );   // 顯示進(jìn)度條  void ShowProgress( int totalStep, int currentStep )  {  _Progress.Maximum = totalStep;  _Progress.Value = currentStep;  }   // 執(zhí)行任務(wù)的委托聲明  delegate void RunTaskDelegate( int seconds );   // 執(zhí)行任務(wù)  void RunTask( int seconds )  {  ShowProgressDelegate showProgress =   new ShowProgressDelegate( ShowProgress );   // 每 1 / 4 秒 顯示進(jìn)度一次  for( int i = 0; i < seconds * 4; i++ )  {  Thread.Sleep( 250 );   // 顯示進(jìn)度條  this.Invoke( showProgress,   new object[] { seconds * 4, i + 1 } );  }  }

C#多線程控制進(jìn)度條之多線程安全實現(xiàn):

采用第二種安全的方法的代碼片斷如下:

// 顯示進(jìn)度條的委托聲明  delegate void ShowProgressDelegate(   int totalStep, int currentStep );   // 顯示進(jìn)度條  void ShowProgress( int totalStep, int currentStep )  {  if( _Progress.InvokeRequired )  {  ShowProgressDelegate showProgress =   new ShowProgressDelegate( ShowProgress );   // 為了避免工作線程被阻塞,采用異步調(diào)用委托  this.BeginInvoke(   showProgress, new object[] {   totalStep, currentStep } );  }  else {  _Progress.Maximum = totalStep;  _Progress.Value = currentStep;  }  }  //C#多線程控制進(jìn)度條之多線程安全 // 執(zhí)行任務(wù)的委托聲明  delegate void RunTaskDelegate( int seconds );   // 執(zhí)行任務(wù)  void RunTask( int seconds )  {  // 每 1 / 4 秒 顯示進(jìn)度一次  for( int i = 0; i < seconds * 4; i++ )  {  Thread.Sleep( 250 );   // 顯示進(jìn)度條  ShowProgress( seconds * 4, i + 1 );  } //C#多線程控制進(jìn)度條之多線程安全}

至此,我們用了幾個示例說明了如何執(zhí)行長任務(wù)、如何通過多線程異步處理任務(wù)進(jìn)度的顯示并解決了多線程的安全性等問題。希望能夠給大家對理解多線程編程、委托的使用、異步調(diào)用等方面提供一些幫助,也希望能和大家進(jìn)行進(jìn)一步的溝通和交流。

看完上述內(nèi)容,你們掌握C#中怎么實現(xiàn)多線程安全的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


本文標(biāo)題:C#中怎么實現(xiàn)多線程安全
新聞來源:http://www.xueling.net.cn/article/gdcoeo.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 日韩在线观看一区二区 | 久久久久99精品久久久久 | 久久美女视频 | 国产免费亚洲 | 九九热精品视频 | 亚洲国产欧美精品 | 不卡中文字幕在线 | 伊人久久一区二区三区 | 久久456 | 不卡无在线一区二区三区 | 无码中文字幕在线播放2 | 91看片网址| 亚洲日本在线观看视频 | 变态一区二区 | 夜色资源站www国产在线观看 | 国产日产欧洲无码视频无遮挡 | 欧美日韩一二三区 | 爱爱视频免费网址 | 爱情岛亚洲AV永久入口首页 | 一区二区精品久久久 | 久久厕所偷拍视频 | 99久久国产综合精品女不卡 | 久久天天躁狠狠躁夜夜 | 亚洲爆乳大丰满无码专区 | 99re热久久这里只有精品6 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲女子a中天字幕 | 蜜桃视频一区二区三区在线观看 | 精品国产乱码久久久久久a丨 | 天天干天天操天天 | 日韩精品一区二区三区中文精品 | 日韩性生活一级片 | 全彩本子爆乳h无遮挡 | 久久精品亚洲7777影院 | 午夜寂寞福利视频 | 欧洲熟妇色xxxx欧美老妇软件 | 女人爽到高潮免费视频2 | 亚洲在线视频一区 | 蜜桃www视频高清在线观看 | 在线观看av黄色 | 国内自产拍自拍A免费毛片 国内精品999 |