首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

线程有关问题(线程间操作无效: 从不是创建控件“results”的线程访问它。)

2012-01-01 
线程问题(线程间操作无效: 从不是创建控件“results”的线程访问它。)private void button1_Click(object sen

线程问题(线程间操作无效: 从不是创建控件“results”的线程访问它。)
private void button1_Click(object sender, EventArgs e)
  {
  results.Items.Clear();
  string addr = address.Text;
  Object state = new Object();

  OnResovled = new AsyncCallback(Resolved);
   
   
  Dns.BeginResolve(addr, OnResovled, state);
  }

  private void Resolved(IAsyncResult ar)
  {
  string buffer;
  IPHostEntry iphe = Dns.EndResolve(ar);
  buffer = "Host name:" + iphe.HostName;
  results.Items.Add(buffer);

  foreach (string alias in iphe.Aliases)
  {
  buffer = "Alias:" + alias;
  results.Items.Add(buffer);

  }

  foreach (IPAddress addrs in iphe.AddressList)
  {
  buffer = "Address:" + addrs.ToString();
  results.Items.Add(buffer);
  }
  }

运行报错:线程间操作无效: 从不是创建控件“results”的线程访问它。


[解决办法]

探讨
public Form1()
{
InitializeComponent();
Form1.CheckForIllegalCrossThreadCalls = false;// 设置为FLASE

}

[解决办法]
C# code
 private void Resolved(IAsyncResult ar) { if (this.InvokeRequired){  OnResovled = new AsyncCallback(Resolved);   this.Invoke(OnResovled , new object[] { ar});}else{                       string buffer;             IPHostEntry iphe = Dns.EndResolve(ar);             buffer = "Host name:" + iphe.HostName;             results.Items.Add(buffer);             foreach (string alias in iphe.Aliases)             {                 buffer = "Alias:" + alias;                 results.Items.Add(buffer);             }             foreach (IPAddress addrs in iphe.AddressList)             {                 buffer = "Address:" + addrs.ToString();                 results.Items.Add(buffer);             }  }} 

热点排行