å¨C#ä¸ï¼ç´æ¥å¨å线ç¨ä¸å¯¹çªä½ä¸çæ§ä»¶æä½æ¯ä¼åºç°å¼å¸¸ï¼è¿æ¯ç±äºå线ç¨åè¿è¡çªä½ç线ç¨æ¯ä¸åç空é´ï¼å æ¤æ³è¦å¨å线ç¨æ¥æä½çªä½ä¸çæ§ä»¶ï¼æ¯ä¸å¯è½ç®åçéè¿æ§ä»¶å¯¹è±¡åæ¥æä½ï¼ä½ä¸æ¯è¯´ä¸è½è¿è¡æä½ï¼å¾®è½¯æä¾äºInvokeçæ¹æ³ï¼å ¶ä½ç¨å°±æ¯è®©å线ç¨åè¯çªä½çº¿ç¨æ¥å®æç¸åºçæ§ä»¶æä½ã
è¦å®ç°è¯¥åè½ï¼æ两ç§æ¹æ³å¯ä»¥éæ©ï¼
1ãå¨ç¨åºåå§åçæ¶å对è¦æä½çæ§ä»¶è®¾ç½®ä¸é¢çå±æ§ï¼
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
è¿æ ·ï¼ç³»ç»å°±ä¸ä¼åæåºä¸é¢æ说çè¿ä¸ªé误äºã
ä»å®è´¨ä¸è¯´ï¼è¯¥æ¹æ³æ¯éè¿éç¨åæ¶çº¿ç¨å®å ¨ä¿æ¤æ¨¡å¼çæ¹å¼å®ç°çï¼æ以ä¸å»ºè®®éç¨ã
2ãåºæ¬æè·¯å¦ä¸ï¼
ææ³å¯¹å¦ä¸çº¿ç¨ä¸çæ§ä»¶å®æ½çæä½æ¾å°ä¸ä¸ªå½æ°ä¸ï¼ç¶å使ç¨delegate代çé£ä¸ªå½æ°ï¼å¹¶ä¸å¨é£ä¸ªå½æ°ä¸å å ¥ä¸ä¸ªå¤æï¼ç¨InvokeRequired æ¥å¤æè°ç¨è¿ä¸ªå½æ°ç线ç¨æ¯å¦åæ§ä»¶çº¿ç¨å¤äºåä¸çº¿ç¨ä¸ï¼å¦ææ¯åç´æ¥æ§è¡å¯¹æ§ä»¶çæä½ï¼å¦åå©ç¨è¯¥æ§ä»¶çInvokeæBeginInvokeæ¹æ³æ¥æ§è¡è¿ä¸ªä»£çã示ä¾ä»£ç å¦ä¸ï¼
1 using System; 2 using System.Collections.Generic; 3 using System.Windows.Forms; 4 5 using System.Threading; 6 7 namespace å线ç¨æä½ä¸»çº¿ç¨çªä½ä¸çæ§ä»¶ 8 { 9 public partial class frmMain : Form 10 { 11 /***************************************************** å®ä¹è¯¥ç±»çç§ææå ****************************************************/ 12 13 /// <summary> 14 /// å®ä¹ä¸ä¸ªéåï¼ç¨äºè®°å½ç¨æ·å建ççº¿ç¨ 15 /// 以便å¨çªä½å
³éçæ¶åå
³éææç¨äºå建ççº¿ç¨ 16 /// </summary> 17 private List<Thread> ChaosThreadList; 18 19 /***************************************************** 该类çåå§åç¸å
³å½æ° ****************************************************/ 20 21 /// <summary> 22 /// çªä½çåå§åå½æ°ï¼åå§å线ç¨éåChaosThreadList 23 /// </summary> 24 public frmMain() 25 { 26 InitializeComponent(); 27 ChaosThreadList = new List<Thread>(); 28 } 29 30 /// <summary> 31 /// çªä½çå
³éäºä»¶å¤çå½æ°ï¼å¨è¯¥äºä»¶ä¸å°ä¹åå建ç线ç¨å
¨é¨ç»æ¢ 32 /// </summary> 33 /// <param name="sender"></param> 34 /// <param name="e"></param> 35 private void frmMain_FormClosed(object sender, FormClosedEventArgs e) 36 { 37 if (ChaosThreadList.Count > 0) 38 { 39 //ç¼åèªå®ä¹éå,å°ææ线ç¨ç»æ¢ 40 foreach (Thread tWorkingThread in ChaosThreadList) 41 { 42 tWorkingThread.Abort(); 43 } 44 } 45 }
46 47 /***************************************************** å®ä¹è¯¥ç±»çèªå®ä¹å½æ° ****************************************************/ 48 49 /// <summary> 50 /// å®ä¹ä¸ä¸ªä»£ç 51 /// </summary> 52 /// <param name="index"></param> 53 /// <param name="MSG"></param> 54 private delegate void DispMSGDelegate(int index,string MSG); 55 56 /// <summary> 57 /// å®ä¹ä¸ä¸ªå½æ°ï¼ç¨äºåçªä½ä¸çListViewæ§ä»¶æ·»å å
容 58 /// </summary> 59 /// <param name="iIndex"></param> 60 /// <param name="strMsg"></param> 61 private void DispMsg(int iIndex,string strMsg) 62 { 63 if (this.lstMain.InvokeRequired==false) //å¦æè°ç¨è¯¥å½æ°ç线ç¨åæ§ä»¶lstMainä½äºåä¸ä¸ªçº¿ç¨å
64 { 65 //ç´æ¥å°å
容添å å°çªä½çæ§ä»¶ä¸ 66 ListViewItem lvi = new ListViewItem(); 67 lvi.SubItems[0].Text = iIndex.ToString(); 68 lvi.SubItems.Add(strMsg); 69 this.lstMain.Items.Insert(0, lvi); 70 } 71 else //å¦æè°ç¨è¯¥å½æ°ç线ç¨åæ§ä»¶lstMainä¸å¨åä¸ä¸ªçº¿ç¨ 72 { 73 //éè¿ä½¿ç¨Invokeçæ¹æ³ï¼è®©å线ç¨åè¯çªä½çº¿ç¨æ¥å®æç¸åºçæ§ä»¶æä½ 74 DispMSGDelegate DMSGD = new DispMSGDelegate(DispMsg); 75 76 //使ç¨æ§ä»¶lstMainçInvokeæ¹æ³æ§è¡DMSGD代ç(å
¶ç±»åæ¯DispMSGDelegate) 77 this.lstMain.Invoke(DMSGD, iIndex, strMsg); 78 79 } 80 } 81 82 /// <summary> 83 /// å®ä¹ä¸ä¸ªçº¿ç¨å½æ°ï¼ç¨äºå¾ªç¯åå表ä¸æ·»å æ°æ® 84 /// </summary> 85 private void Thread_DisplayMSG() 86 { 87 for (int i = 0; i < 10000; i++) 88 { 89 DispMsg(i + 1, "Welcome you : " + (i + 1).ToString()); 90 Thread.Sleep(10); 91 } 92 } 93 94 /***************************************************** å®ä¹è¯¥ç±»çäºä»¶å¤çå½æ° ****************************************************/ 95 96 /// <summary> 97 /// ãå¼å§ãæé®çåå»äºä»¶å¤çå½æ°,æ°å»ºä¸ä¸ªçº¿ç¨åçªä½ä¸çListViewæ§ä»¶å¡«åå
容 98 /// </summary> 99 /// <param name="sender"></param>100 /// <param name="e"></param>101 private void btnBegin_Click(object sender, EventArgs e)102 {103 //å建ä¸ä¸ªæ°ç线ç¨104 Thread tWorkingThread = new Thread(Thread_DisplayMSG);105 106 //å°æ°å»ºç线ç¨å å
¥å°èªå®ä¹çº¿ç¨éåä¸ï¼ä»¥ä¾¿å¨çªä½ç»ææ¶å
³éææç线ç¨107 ChaosThreadList.Add(tWorkingThread);108 109 //å¼å¯çº¿ç¨110 tWorkingThread.Start();111 }
112 113 }114 }
è¿æ ·åå°±å¯ä»¥å®ç°ç¨å线ç¨å»æä½ä¸»çº¿ç¨çªä½ä¸çæ§ä»¶çå 容ï¼åæ¶ï¼åä¸å½±å主线ç¨å¯¹çªä½ä¸å ¶ä»æ§ä»¶çååºãç¨åºè¿è¡æªå¾å¦ä¸ï¼
ç¹å»[å¼å§]æé®ï¼ç¨åºå¼å¯ä¸ä¸ªæ°ç线ç¨ï¼ä¸æåå表ä¸æ·»å æ°çæ°æ®ï¼èåæ¶ä¸ä¼å½±å主çé¢å¯¹å ¶å®æ§ä»¶ï¼ä¾å¦ï¼ææ¬æ¡ï¼çååºã