
C# 不同窗体 不同线程间传递数据
程序运行时启动窗体A(A中有一个label1),然后实例化一个窗体B,在B中有多个线程,其中一个线程是TCP数据接收线程,当该线程接收到数据时如何将该数据传递给A窗体的l...
程序运行时启动窗体A(A中有一个label1),然后实例化一个窗体B,在B中有多个线程,其中一个线程是TCP数据接收线程,当该线程接收到数据时如何将该数据传递给A窗体的label呢?请问如何用委托或事件实现?
展开
展开全部
传递数据给A的Label: 不通过事件是比较难的(在不关闭B的情况下)。当然也可以实现。你可以定一个公共的类来存放一些信息,这样A,B都能访问它,从而实现数据的交互。
使用委托和事件来实现:首先你得对事件(也是一种委托)有一定的了解。像你这种情况,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
}
}
}
纯手打 望采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询