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

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

編輯:關於C語言
.把【掃描網絡計算機】程序修改成基於多線程的程序:

在修改成多線程程序之前,必須面對並解決下面幾個問題:

1. 線程是無返回值的,所以在線程中處理、調用的應是一個過程,所以要把掃描IP地址對應的計算機的代碼給包裝成一個過程。

2. 放在線程中處理的過程,因為沒有返回值,從而無法向主程序(進程)傳遞數值。但掃描IP地址對應的計算機的過程卻要向主程序(進程)傳遞IP地址是否在線的數據,所以在修改成多線程程序之前,必須從線程往主程序(進程)傳遞數據的問題。

下面是在【掃描網絡計算機】項目的基礎上,把它修改成基於多線程程序的具體實現步驟:

1. 由於程序中使用到線程,所以在Form1.cs代碼首部,導入命名空間代碼區中加入下列代碼,下列代碼是導入Thread類所在的命名空間。

using System.Threading ;

2. 在Form1.cs代碼的namespace代碼區加入下列語句,下列語句是定義一個delegate:

public delegate void UpdateList ( string sIP , string sHostName ) ;

3. 在Form1.cs中的定義Form1的class代碼區定義加入下列代碼,下列代碼是定義一個變量,用以存放程序執行的時間:

private System.DateTime StartTime ;

4. 在Form1.cs代碼的Main函數之後,添加下列代碼,下列代碼是創建一個名稱為ping的Class,這個Class能夠通過其設定的屬性接收給定的IP地址字符串,並據此來判斷此IP地址字符串對應的計算機是否在線,並通過其設定的HostName屬性接收從線程傳遞來的數據。

public class ping
{
 public UpdateList ul ;
 public string ip ;
 //定義一個變量,用以接收傳送來的IP地址字符串
 public string HostName ;
 //定義一個變量,用以向主進展傳遞對應IP地址是否在線數據
 public void scan ( )
 {
  IPAddress myIP = IPAddress.Parse ( ip ) ;
  try
  {
   IPHostEntry myHost = Dns.GetHostByAddress ( myIP );
   HostName = myHost.HostName.ToString ( ) ;
  }
  catch
  {
   HostName = "" ;
  }
  if (HostName == "")
   HostName = " 主機沒有響應!";
  if ( ul != null)
   ul ( ip , HostName ) ;
 }
 //定義一個過程(也可以看出為方法),用以判斷傳送來的IP地址對應計算機是否在線
}

5. 在Form1.cs中添加完上述代碼後,再添加下列代碼:

void UpdateMyList ( string sIP , string sHostName )
{
 lock ( listBox1 )
 {
  listBox1.Items.Add ( sIP + " " + sHostName ) ;
  if ( progressBar1.Value != progressBar1.Maximum )
  {
   progressBar1.Value++ ;
  }
  if ( progressBar1.Value == progressBar1.Maximum )
  {
   MessageBox.Show ( "成功完成檢測!" , "提示" ) ;
   DateTime EndTime = DateTime.Now ;
   TimeSpan ts = EndTime-StartTime ;
   label4.Text = ts.Seconds.ToString ( ) + "秒" ;
   //顯示掃描計算機所需要的時間
   progressBar1.Value = progressBar1.Minimum ;
  }
 }
}

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