老熟女激烈的高潮_日韩一级黄色录像_亚洲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
主站蜘蛛池模板: 性色AV极品无码专区亚洲 | 国产对白叫床东北女人 | 亚洲欧美在线一区 | 欧美久久国产精品 | 最新黄色在线观看 | 在线观看的网站你懂的 | 丰满人妻一区二区三区av猛交 | 久久久亚洲精品石原莉奈 | 国产不卡片| 欧美大片首页欧美大片首页 | 麻豆免费视频网站 | 亚洲资源在线观看 | 台湾成人免费视频 | 日出水了好爽视频 | 精品国产麻豆一区二区三区 | 亚洲国产福利成人一区二区 | 999精品无码a片在线1级 | 一本色道无码道在线观看 | 色爱99 | 最新大地资源网在线观看免费 | 亚洲精品免费av | 亚洲avav天堂av在线网爱情 | 国产精品a一 | 在线观看国产成人av片 | 17CC网黑料爆料一区二区三区 | 四季av一区二区三区免费观看 | 国产精品国 | 国产手机在线精品 | 精品香蕉久久久爽爽 | 久久久久久久久久久久久久久久久久av | 九一传媒在线观看 | 国产91区精品福利在线社区 | 在线看一级毛片免费视频播放 | 色吊丝最新网站2288sds | 精品无码一区在线观看 | 精品成人免费一区二区不卡 | 久久黄色视 | 亚洲一久久久久久久久 | 成人av影片在线观看 | 蜜桃视频在线一区 | 久久亚洲春色中文字幕久久久 |