You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.1 KiB
141 lines
4.1 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Net.NetworkInformation;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace NetworkSpeedTest
|
|
{
|
|
public partial class MainForm : Form
|
|
{
|
|
private DataTable adapterTable;
|
|
private PerformanceCounter netCounter;
|
|
private Timer timer;
|
|
|
|
private string networkCard;
|
|
private int maxSpeed = 0;
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
InitInstance();
|
|
|
|
}
|
|
|
|
public void InitInstance()
|
|
{
|
|
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
|
|
|
|
adapterTable = new DataTable();
|
|
adapterTable.Columns.Add("Name", typeof(string));
|
|
adapterTable.Columns.Add("Description", typeof(string));
|
|
|
|
for (int i = 0; i < adapters.Length; i++)
|
|
{
|
|
adapterTable.Rows.Add(new string[] { adapters[i].Name, adapters[i].Description });
|
|
}
|
|
|
|
CardComboBox.DataSource = adapterTable.DefaultView;
|
|
CardComboBox.ValueMember = "Description";
|
|
}
|
|
|
|
private void StartMeasuring()
|
|
{
|
|
StartButton.Text = "중지";
|
|
maxSpeed = 0;
|
|
SpeedBar.Value = 0;
|
|
SpeedBar.Maximum = 0;
|
|
|
|
timer = new Timer();
|
|
timer.Interval = 1000;
|
|
timer.Tick += new EventHandler(Timer_Tick);
|
|
timer.Start();
|
|
}
|
|
|
|
private void StopMeasuring()
|
|
{
|
|
StartButton.Text = "측정";
|
|
timer.Stop();
|
|
}
|
|
|
|
private void Timer_Tick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int speed = (int)netCounter.NextValue();
|
|
if (speed > maxSpeed)
|
|
{
|
|
maxSpeed = speed;
|
|
SpeedBar.Maximum = maxSpeed;
|
|
MaxSpeedLabel.Text = string.Format("{0} bps", maxSpeed.ToString("N0"));
|
|
}
|
|
|
|
SpeedBar.Value = speed;
|
|
float percentage = maxSpeed == 0f ? 0f : (float)speed / (float)maxSpeed * 100f;
|
|
SpeedLabel.Text = string.Format("{0} bps ({1}%)", speed.ToString("N0"), percentage.ToString("N2"));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
StopMeasuring();
|
|
MessageBox.Show("다음과 같은 이유로 측정할 수 없습니다." + Environment.NewLine + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void StartButton_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(networkCard))
|
|
{
|
|
MessageBox.Show("네트워크 카드를 선택해 주십시오.");
|
|
}
|
|
|
|
if (StartButton.Text == "측정")
|
|
{
|
|
StartMeasuring();
|
|
}
|
|
else
|
|
{
|
|
StopMeasuring();
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void CardComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DataRowView rowView = CardComboBox.SelectedItem as DataRowView;
|
|
if (rowView == null)
|
|
return;
|
|
|
|
string description = rowView.Row["Description"].ToString();
|
|
networkCard = description
|
|
.Replace('(', '[')
|
|
.Replace(')', ']')
|
|
.Replace('/', '_');
|
|
|
|
netCounter = new PerformanceCounter();
|
|
netCounter.CategoryName = "Network Interface";
|
|
netCounter.CounterName = "Bytes Total/sec";
|
|
netCounter.InstanceName = networkCard;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|