程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 多線程在Visual C#網絡編程中的應用(5)

多線程在Visual C#網絡編程中的應用(5)

編輯:關於C語言

6. 用下列代碼替換Form1.cs中button1的Click事件對應的處理代碼,下列代碼功能是創建多個掃描給定IP地址區間對應的計算機線程實例,並顯示掃描結果。

private void button1_Click(object sender, System.EventArgs e)
{
 listBox1.Items.Clear ( ) ;
 //清楚掃描結果顯示區域
 StartTime = DateTime.Now ;
 //獲取當前時間
 string mask = numericUpDown1.Value.ToString ( ) + "." + numericUpDown2.Value.ToString ( ) +
"." + numericUpDown3.Value.ToString ( ) + "." ;
 int Min = ( int ) numericUpDown4.Value ;
 int Max = ( int ) numericUpDown5.Value ;
 if ( Min > Max )
 {
  MessageBox.Show ( "輸入的IP地址區間不合法,請檢查!" , "錯誤!" ) ;
  return ;
 }
 //判斷輸入的IP地址區間是否合法
 int _ThreadNum = Max - Min + 1 ;
 Thread[] mythread = new Thread [ _ThreadNum ] ;
 //創建一個多個Thread實例
 progressBar1.Minimum = Min ;
 progressBar1.Maximum = Max + 1 ;
 progressBar1.Value = Min ;
 int i ;
 for (i = Min ; i <= Max ; i++ )
 {
  int k = Max - i ;
  ping HostPing = new ping ( ) ;
  //創建一個ping實例
  HostPing.ip = mask + i.ToString ( ) ;
  HostPing.ul = new UpdateList ( UpdateMyList ) ;
  //向這個ping實例中傳遞IP地址字符串
  mythread[k] = new Thread ( new ThreadStart ( HostPing.scan ) ) ;
  //初始化一個線程實例
  mythread[k].Start ( ) ;
  //啟動線程
 }
}

至此,【掃描網絡計算機】項目已經被修改成一個多線程的程序了,此時在運行程序,並且同樣再掃描上面給定IP地址區間對應的計算機,就會驚奇的發現程序執行時間所建為10秒了,並且不論要掃描的計算機數目有多少,程序的運行時間也是10秒左右,這是因為程序為掃描每一個IP都分配一個線程,這樣程序的執行時間就不與要掃描的IP地址段中的IP地址數目有關聯了,這樣也就大大減少了程序的運行時間,提高了程序的運行效率,這也充分體現出多線程給網絡編程帶來的好處。圖03也是程序掃描"10.138.198.1"至"10.138.198.10"這個IP地址區間計算機後的運行界面所示:

圖03:基於多線程的【掃描網絡計算機】項目的運行界面

通過對二個程序的比較可見,在編寫網絡應用程序中,正確的使用線程的確能夠大大提高程序的運行效率。

六.總結:

至此,本節要介紹的內容就全部結束了,不知道諸位通過上面的介紹是否了解、掌握了下面幾點:

1. 如何獲取系統當前時間,和實現時間日期類型數據的加減。

2. 在編寫網絡應用程序時候,使用線程(多線程)的原因,以及線程(多線程)會給網絡應用程序帶來什麼好處。

3. 如何在應用程序中創建多個線程實例。

4. 如何實現帶"返回值"的線程。

如果上述要點你都能夠掌握,那是再好不過的了。但如果你對線程及其使用方法還感覺模糊,那也不要緊,畢竟線程在編程技術中是一個內容豐富,使用復雜的東東,要立馬掌握的確是很困難的事情。在以後的文章中也將再介紹這方面的內容。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved