成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#多線程控制進度條之多線程安全

開發 后端
C#多線程控制進度條之多線程安全具體的是什么情況呢?C#多線程控制進度條之多線程安全都有哪些是需要注意的呢?那么本文就向你介紹這些相關的內容。

C#多線程控制進度條之多線程安全的具體內容是什么呢?讓我們開始吧:

到這里為止,我們已經解決了長任務的難題和傳遞參數的困擾。但是我們真的解決了全部問題嗎?回答是否定的。

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

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

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

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

C#多線程控制進度條之多線程安全 

C#多線程控制進度條之多線程安全圖

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

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

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

C#多線程控制進度條之多線程安全實現:

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

  1. // 顯示進度條的委托聲明  
  2. delegate void ShowProgressDelegate(  
  3.  int totalStep, int currentStep );  
  4.  
  5. // 顯示進度條  
  6. void ShowProgress( int totalStep, int currentStep )  
  7. {  
  8. _Progress.Maximum = totalStep;  
  9. _Progress.Value = currentStep;  
  10. }  
  11.  
  12. // 執行任務的委托聲明  
  13. delegate void RunTaskDelegate( int seconds );  
  14.  
  15. // 執行任務  
  16. void RunTask( int seconds )  
  17. {  
  18. ShowProgressDelegate showProgress =   
  19. new ShowProgressDelegate( ShowProgress );  
  20.  
  21. // 每 1 / 4 秒 顯示進度一次  
  22. forint i = 0; i < seconds * 4; i++ )  
  23. {  
  24. Thread.Sleep( 250 );  
  25.  
  26. // 顯示進度條  
  27. this.Invoke( showProgress,  
  28.  new object[] { seconds * 4, i + 1 } );  
  29. }  

C#多線程控制進度條之多線程安全實現:

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

  1. // 顯示進度條的委托聲明  
  2. delegate void ShowProgressDelegate(  
  3.  int totalStep, int currentStep );  
  4.  
  5. // 顯示進度條  
  6. void ShowProgress( int totalStep, int currentStep )  
  7. {  
  8. if( _Progress.InvokeRequired )  
  9. {  
  10. ShowProgressDelegate showProgress =   
  11. new ShowProgressDelegate( ShowProgress );  
  12.  
  13. // 為了避免工作線程被阻塞,采用異步調用委托  
  14. this.BeginInvoke(   
  15. showProgress, new object[] {   
  16. totalStep, currentStep } );  
  17. }  
  18. else 
  19. {  
  20. _Progress.Maximum = totalStep;  
  21. _Progress.Value = currentStep;  
  22. }  
  23. }  //C#多線程控制進度條之多線程安全
  24.  
  25. // 執行任務的委托聲明  
  26. delegate void RunTaskDelegate( int seconds );  
  27.  
  28. // 執行任務  
  29. void RunTask( int seconds )  
  30. {  
  31. // 每 1 / 4 秒 顯示進度一次  
  32. forint i = 0; i < seconds * 4; i++ )  
  33. {  
  34. Thread.Sleep( 250 );  
  35.  
  36. // 顯示進度條  
  37. ShowProgress( seconds * 4, i + 1 );  
  38. } //C#多線程控制進度條之多線程安全

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

C#多線程控制進度條之多線程安全相關的內容就向你介紹到這里,希望對你了解和學習C#多線程控制進度條之多線程安全有所幫助。

【編輯推薦】

  1. C#進度條之控制臺顯示淺析
  2. C# WinForm進度條實現淺析
  3. C#多線程控制進度條之長任務操作
  4. C#多線程控制進度條之長異步操作
  5. C#多線程控制進度條之異步調用
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-17 16:41:03

C#多線程控制

2009-08-17 16:29:56

C#多線程控制

2009-08-17 16:49:46

C#多線程控制

2009-08-17 14:08:33

C#進度條使用

2021-03-05 07:38:52

C++線程編程開發技術

2009-08-28 16:51:32

C#線程控制

2023-06-05 07:56:10

線程分配處理器

2023-06-06 08:17:52

多線程編程Thread類

2023-06-13 13:39:00

多線程異步編程

2009-08-12 18:04:44

編寫C#多線程

2011-06-24 11:12:39

Qt 多線程 線程

2009-08-28 16:43:57

C#多線程學習

2009-09-04 15:09:48

C#多線程啟動Squa

2011-08-18 17:07:23

IOS開發多線程NSInvocatio

2025-02-27 08:15:28

2009-08-17 15:05:41

C#進度條

2009-08-26 18:13:55

C#多線程lock

2011-04-25 14:42:10

C#lock

2024-10-21 16:59:37

C#編程多線程

2009-07-17 10:37:05

C#多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品完整版 | 国产一级片在线观看视频 | 免费黄色大片 | 成人三区 | 一区二区三区四区国产 | 久久亚洲国产 | 中文字幕成人 | 久久69精品久久久久久久电影好 | 欧美手机在线 | 欧美精品一区二区三 | 手机在线观看 | 成人免费av| 在线亚州 | 99视频在线免费观看 | 国产日韩欧美精品 | 激情久久av一区av二区av三区 | 看毛片的网站 | 狠狠的干 | 欧美一区视频 | 久久精品91久久久久久再现 | 精品国产乱码久久久久久久久 | 天天拍天天操 | 精品九九久久 | 夜夜精品视频 | 日本精品久久久久久久 | 欧美一级片免费看 | 一级国产精品一级国产精品片 | 免费人成在线观看网站 | 亚洲www啪成人一区二区 | 久久99成人 | 成人h片在线观看 | 国产黄色电影 | 福利在线观看 | 日韩一区二区福利 | 久久久久久亚洲精品 | 中文字幕精品一区二区三区精品 | 国产高清视频 | 精品一区二区三区四区外站 | 成人午夜在线 | 国产精品a久久久久 | 青青草华人在线视频 |