C# 线程访问winform控件的方法

C#的WinForm控件不允许跨线程直接访问,需要通过InvokeRequired属性判断。当属性为真时,需使用Invoke方法确保操作在正确的线程上执行。本文介绍了如何定义委托并结合InvokeRequired实现线程安全的控件访问,以文本框为例展示了具体的代码实现。
摘要由CSDN通过智能技术生成

在winform外调用winform控件的方法很多,比如delegate、Action、Func等方法异步调用,但是C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。

Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性 。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。

 

具体用线程访问winform控件的方法,如下:

 

首先定义一个委托,与这个事件处理函数的签名一样委托,当然直接使用该事件的委托也是可以的,如:

 

 private   delegate   void  InvokeCallback( string  msg);

 

//然后就是判断这个属性的值来决定是否要调用Invoke函数:

 

 void  m_comm_MessageEvent( string  msg)

 

    {

 

     if (txtMessage.InvokeRequired)

 

     {

 

      InvokeCallbackmsgCallback  =   new  InvokeCallback(m_comm_MessageEvent);

 

      txtMessage.Invoke(msgCallba

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值