private void ScanTarget()
{
//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
// numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
string strIPAddress=numericUpDown1.Text+"."+numericUpDown2.Text+"."+numericUpDown3.Text+".";
//开始扫描地址
int nStrat = Int32.Parse(numericUpDown4.Text);
//终止扫描地址
int nEnd = Int32.Parse(numericUpDown5.Text);
//扫描的操作
for(int i=nStrat;i<=nEnd;i++)
{
string strScanIPAdd = strIPAddress +i.ToString();
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd);
try
{
//你可以加入自已的,增强功能
// Dns.GetHostByAddress 方法: 根据 IP 地
//址获取 DNS 主机信息。
//IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP );
IPHostEntry myScanHost = Dns.GetHostEntry(myScanIP);
//获取主机的名
string strHostName = myScanHost.HostName.ToString();
richTextBox1.AppendText(strScanIPAdd + " " + strHostName + "\r");
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}//for
}//private这个函数 在多线程里 报错了 private void button3_Click(object sender, EventArgs e)
{ //Thread 类: 创建并控制线程
Thread thScan = new Thread(new ThreadStart(ScanTarget));
thScan.Start();
}错误如下:
Cross- thread operation not valid: controls 'richtextbox1' accessed from a thread other
than the thread it was created on.
咋解决啊?
{
//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
// numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
string strIPAddress=numericUpDown1.Text+"."+numericUpDown2.Text+"."+numericUpDown3.Text+".";
//开始扫描地址
int nStrat = Int32.Parse(numericUpDown4.Text);
//终止扫描地址
int nEnd = Int32.Parse(numericUpDown5.Text);
//扫描的操作
for(int i=nStrat;i<=nEnd;i++)
{
string strScanIPAdd = strIPAddress +i.ToString();
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd);
try
{
//你可以加入自已的,增强功能
// Dns.GetHostByAddress 方法: 根据 IP 地
//址获取 DNS 主机信息。
//IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP );
IPHostEntry myScanHost = Dns.GetHostEntry(myScanIP);
//获取主机的名
string strHostName = myScanHost.HostName.ToString();
richTextBox1.AppendText(strScanIPAdd + " " + strHostName + "\r");
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}//for
}//private这个函数 在多线程里 报错了 private void button3_Click(object sender, EventArgs e)
{ //Thread 类: 创建并控制线程
Thread thScan = new Thread(new ThreadStart(ScanTarget));
thScan.Start();
}错误如下:
Cross- thread operation not valid: controls 'richtextbox1' accessed from a thread other
than the thread it was created on.
咋解决啊?
解决方案 »
- C#使用 mciSendString 函式播放音效问题
- 关于Excel的引用的
- 如何将DataGird中的某列固定到第一列
- 使用windows installer, 如何让程序开机启动
- 20:30——————这样的时间格式能用DateTime类型表示出来吗?
- 请大家提供一个基于asp.net的可以快速开发应用的第三方构架吧
- 菜鸟提问:能否给出表中总数为前十个的完整代码?
- vs2010中关于水晶报表的问题???
- 关于Icon.Save()一问?
- 怎么才能用=赋值时进行克隆而不是引用?
- 端服务器端控制客户端打开程序的限制,C/S结构
- 发一个程序,大家帮我看看,问题是“Web Service下使用NHibernate遇到的问题”
thScan.Start();
private void Run()
{
MethodInvoker mi = new MethodInvoker(ScanTarget);
while (true)
{
Invoke(mi);
Thread.Sleep(10);
}
}
string strHostName = myScanHost.HostName.ToString();
Thread.Sleep(100); //修改前休眠线程richTextBox1.AppendText(strScanIPAdd + " " + strHostName + "\r");
Thread.Sleep(100); //修改前休眠线程richTextBox1.AppendText(strScanIPAdd + " " + strHostName + "\r");按你的这样写法 ,还是有错误啊错误如下:
Cross- thread operation not valid: controls 'richtextbox1' accessed from a thread other
than the thread it was created on.
咋解决啊?
因为这个的问题,同时往里面添加值肯定不行
lock(thislock) {
richTextBox1.AppendText(strScanIPAdd + " " + strHostName + "\r");
}
Cross- thread operation not valid: controls 'richtextbox1' accessed from a thread other
than the thread it was created on.
---------------------------------------
跨线程操作无效,你从非界面线程访问richtextbox1控件。
使用控件Invoke方法,或把方法委托给线程
下面是我用05改了一下
public delegate void OutPutDelegate(string outputStr);public void OutPut(string outputStr) {
if (this.InvokeRequired) {
OutPutDelegate opd = new OutPutDelegate(OutPut);
this.BeginInvoke(opd, new object[] { outputStr });
}
else {
this.richTextBox1.AppendText(outputStr);
}
}
private void ScanTarget()
{
//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
// numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
string strIPAddress=numericUpDown1.Text+"."+numericUpDown2.Text+"."+numericUpDown3.Text+".";
//开始扫描地址
int nStrat = Int32.Parse(numericUpDown4.Text);
//终止扫描地址
int nEnd = Int32.Parse(numericUpDown5.Text);
//扫描的操作
for(int i=nStrat;i<=nEnd;i++)
{
string strScanIPAdd = strIPAddress +i.ToString();
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd);
try
{
//你可以加入自已的,增强功能
// Dns.GetHostByAddress 方法: 根据 IP 地
//址获取 DNS 主机信息。
//IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP );
IPHostEntry myScanHost = Dns.GetHostEntry(myScanIP);
//获取主机的名
string strHostName = myScanHost.HostName.ToString();
this.OutPut(strScanIPAdd + " " + strHostName + "\r");
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}//for
}//privateprivate void button3_Click(object sender, EventArgs e)
{ //Thread 类: 创建并控制线程
Thread thScan = new Thread(new ThreadStart(ScanTarget));
thScan.Start();
}