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