c#多线程程序设计实例方法
作者:laozhang 发布时间:2023-07-24 16:39:28
相信很多人都了解c#语言,但是对于c#语言编写应用程序的经验不够多,所以经常为没有实例练习而烦恼吧。今天小编给大家介绍下C#里的多线程技术。主要是让大家学会线程的创建和启动方法,理解在线程中如何通过委托和窗体控件交互,同时练习IPAddress类、Dns类、IPHostEntry类的基本用法。
1、打开Microsoft Visual Studio 2010软件,选择新建项目,创建一个名叫ScanComputer的Windows窗体应用程序项目,(当然项目名大家可以自己任意取,这个对我们的实验没影响。)接着点击【确定】即可。
2、在【解决方案资源管理器】中,将Form1.cs改为MainForm.cs,然后从右侧工具栏中拖动控件到主窗体中,其中将Label1和Label2控件的【AutoSize】属性改为"False",【BorderStyle】属性改为“Fixed3D“,其他控件属性可以后面在设置。最后将界面设计成如下图所示。
3、双击【扫描】按钮,让它自动创建Click事件,然后在【扫描】按钮的Click事件中,先判断IP地址范围是否符合要求,然后统计要扫描的IP的个数,执行扫描操作。并在【扫描】按钮创建Click的事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
listBox1.Items.Clear();
string subIP = string.Format("{0}.{1}.{2}",
numericUpDown1.Value,
numericUpDown2.Value,
numericUpDown3.Value);
int start = (int)numericUpDown4.Value;
int end = (int)numericUpDown8.Value;
if (end < start)
{
MessageBox.Show("IP地址区间不正确!");
return;
}
if (radioButton1.Checked)
{
ScanWithMultThreads(subIP, start, end);
}
else
{
Scan(subIP, start, end);
}
this.Cursor = Cursors.Default;
}
4、在【解决方案资源管理器】中,找到项目名“ScanComputer”并用鼠标右键单击它,会出现一个弹出框,在弹出框中选择【添加】会出现另一个弹出框,在弹出框中选择【类】,创建一个类文件San.cs,使用多线程执行扫描操作。并添加如下代码:
class Scan
{
public string ip { get; set; }
public MainForm form { get; set; }
public void CheckComputer(Object obj) {
string hostName = "";
try
{
IPAddress ipAddress = IPAddress.Parse(ip);
IPHostEntry hostEntry = Dns.GetHostEntry(ipAddress);
hostName = hostEntry.HostName;
}
catch {
hostName = "未找到主机";
}
form .AddInfoDelegate(ip ,hostName );
}
}
5、在MainForm.cs中添加如下代码,让线程通过委托和窗体控件进行交互,同时运用了Dns类:
private delegate void GetComputerDnsDelegate(string strIP, string strHostName);
public MainForm()
{
InitializeComponent();
}
public void AddInfoDelegate(string ip, string hostName)
{
GetComputerDnsDelegate d = AddInfo;
listBox1.Invoke(d, ip, hostName);
}
public void AddInfo(string ip, string hostName)
{
listBox1.Items.Add(string.Format("IP地址:{0}\t域名:{1}", ip, hostName));
}
6、在MainForm.cs中添加如下代码,将Scan类和主窗体联系起来。同时运用了IPAddress类和IPHostEntry类。
private void Scan(string subIP, int start, int end)
{
int ipCount = end - start + 1;
for (int i = 0; i < ipCount; i++)
{
string ip = string.Format("{0}.{1}", subIP, start + i);
string hostName = "";
try
{
IPAddress ipAddress = IPAddress.Parse(ip);
IPHostEntry hostEntry = Dns.GetHostEntry(ipAddress);
hostName = hostEntry.HostName;
}
catch
{
hostName = "未找到主机";
}
AddInfo(ip, hostName);
}
}
7、对IP地址开始时间和结束时间的定义:
private void ScanWithMultThreads(string subIP, int start, int end) {
int ipCount = end - start + 1;
Thread[]scanThreads=new Thread [ipCount];
for (int i = 0; i < ipCount; i++) {
Scan scan=new Scan {
ip =string .Format ("{0}.{1}",subIP ,start +i),
form=this
};
scanThreads [i]=new Thread (scan.CheckComputer);
scanThreads [i].IsBackground=true ;
scanThreads [i].Start();
}
}
8、将下面代码添加到MainForm.cs,多线程应用程序就做好了
private void numericUpDownStart_ValueChanged(object sender, EventArgs e)
{
numericUpDown5.Value = numericUpDown1.Value;
numericUpDown6.Value = numericUpDown2.Value;
numericUpDown7.Value = numericUpDown3.Value;
}


猜你喜欢
- JAVA关键字final用于修饰数据、方法或类,通常意味着“无法改变的”,既数据不能改变,方法不能覆盖,类不能继承。一般采用final有两种
- Java的接口和抽象类深入理解对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。
- 本文实例讲述了Android编程之利用服务实现 * 听的方法。分享给大家供大家参考,具体如下:1. 启动模拟器,部署应用2. 利用模拟器控制
- 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善,上层软件开发者往
- 具体详细介绍请看下文:在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Common
- 1. 单个属性yaml 内的属性如下:server: port: 80只需在成员变量上注解 @Value(“
- 在Ubuntu Android简单介绍硬件抽象层(HAL)一文中,
- 1.添加引用工具箱---右键---选择项--COM组件--Adobe PDF Reader2.使用方法OpenFileDialog open
- 前言继上次文章C# 初识Picture控件,今天我们来学一下PictureBox的方法以及一些基本操作,对于图片的删除,上传以及重命名,之前
- 目录一、ThreadLocal简介二、ThreadLocal简单使用三、ThreadLocal的实现原理1、set方法源码2、get方法源码
- 一、使用注解实现自定义映射关系当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用 @
- 在我们编写好一款软件后,我们不想别人盗用我们的软件,这时候我们可以采用注册的方式来保护我们的作品。这时候我们可能就需要简单了解一下加密解密技
- 本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: )1. Intent简
- JDK * :利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGlib * :利用AS
- 给对象按照字符串属性进行排序在java中对象进行排序,排序的属性是string,我们只需要实现Comparator接口,然后实现比较的方式。
- 简介JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。JSON Web Token 入门教程 这篇文章可以帮你了解
- 正文:相关术语翻译说明:Mark,标记;Sweep,清除;Compact,整理; 也有人翻译为压缩,译者认为GC时不存在压缩这回事。Copy
- Java有一种特殊线程,守护线程,这种线程优先级特别低,只有在同一程序中的其他线程不执行时才会执行。由于守护线程拥有这些特性,所以,一般用为
- resultTyperesultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sq
- 简介本文用示例介绍SpringBoot如何解决雪花算法主键ID传到前端后精度丢失问题。问题描述Java后端Long类型的范围-2^63~2^