登峰造极境

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Platforms
  3. WINDOWS
  4. CSharp
  5. 正文

C# 中使用委托 解决 “线程间操作无效: 从不是创建控件“label1”的线程访问它” 问题

2015-03-20
此文为收集类文章,并非一定为原创,手动将零碎代码、文字收集成一篇博文,感谢作者们的无私奉献!

问题代码:

private void Form1_Load(object sender, EventArgs e)
{
//多线程
AAA= new Thread(new ThreadStart(BBB));
AAA.Start();
}

//接收数据方法

public void BBB()
{
while (true)
{
IPEndPoint IpSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tmpRemote = (EndPoint)IpSender;

byte[] recive = new byte[1024];
try
{
int recv = bacnet_master_socket.ReceiveFrom(recive, ref tmpRemote);
}
catch (Exception efe)
{
label1.Text = efe.ToString();
}
}
}

问题:执行时显示“线程间操作无效: 从不是创建控件“label1”的线程访问它“异常

解决办法:
因为是在线程里操作主线程的控件,所以出错,你应该用委托
控件的invoke函数

操作实列请看

http://msdn.microsoft.com/zh-cn/library/zyzhdc6b(v=VS.80).aspx

private delegate void MyDelegateUI();

 if (label1.InvokeRequired)
{
MyDelegateUI d = delegate
{
label1.Text = efe.ToString();
};
label1.Invoke(d);
}
else
{
label1.Text = efe.ToString();
}
标签: 暂无
最后更新:2016-01-24

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号