C# 不同窗体 不同线程间传递数据

程序运行时启动窗体A(A中有一个label1),然后实例化一个窗体B,在B中有多个线程,其中一个线程是TCP数据接收线程,当该线程接收到数据时如何将该数据传递给A窗体的l... 程序运行时启动窗体A(A中有一个label1),然后实例化一个窗体B,在B中有多个线程,其中一个线程是TCP数据接收线程,当该线程接收到数据时如何将该数据传递给A窗体的label呢?请问如何用委托或事件实现? 展开
 我来答
long战941
2015-06-10
知道答主
回答量:23
采纳率:0%
帮助的人:15.9万
展开全部
  1. 传递数据给A的Label: 不通过事件是比较难的(在不关闭B的情况下)。当然也可以实现。你可以定一个公共的类来存放一些信息,这样A,B都能访问它,从而实现数据的交互。

  2. 使用委托和事件来实现:首先你得对事件(也是一种委托)有一定的了解。像你这种情况,A应是订阅者而B是发布者。在A里面实例化B的时候,就可以进行绑定。具体的做法:在B里声明一个事件(委托),暴露出去给A,A可以用自己的一个方法去进去监听,监听这个动作需要你实例化B的时候来完成。而B需要决定什么时候来触发这个事件。从你的问题来看,应该是在接受到数据的时候去触发这个事件。具体的Code:

namespace Test
{
      public delegate void SendMessageEventHandler(Object sender, string str) 
      public class B : Form
      {
            public event SendMessageEventHandler SendMessage;
            public void ReceiveMessage()//你在B中接收信息的方法
            {
                 //你接收信息的代码
                 if(接收成功)
                 {
                     if(SendMessage != null)//说明有人订阅了你的事件
                     {
                          SendMessage(this, "你接收到的信息")
                     }   
                  }    
            } 
  
      }
      public class A : Form
      {
           void SomeMethod()//用来启动Form B的那个方法
           {
                 B b = new B();
                 ...
                 ... //其它一些设置
                 b.SendMessage += this.UpdateLabel;    
           }   

           public void UpdateLabel(Object sender, string str)
           {
                  //在这里更新你的Label 
            }  
      }


}

纯手打 望采纳

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式