花心码农
2015-06-02 08:26
采纳率: 100%
浏览 1.8k
已采纳

C# 不同项目间委托更新主程序控件文本问题,帮我看看。

1.C#相关SerialPort通信解决方案,原来SerialPort和主程序是同一个项目,不同的CS里,我可以直接委托,在接收数据时更新窗口的值。
2.现在要将SerialPort逻辑操作独立一个项目。。我就不知道怎样操作,如果引用主程序时会报一个相互引用的报错。
3.新手求教。。以前同一个项目里时,代码是这样的: void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

             int size = serial.BytesToRead; 
            byte[] list = new byte[size];
            serial.Read(list, 0, size);
           builder.Remove(0, builder.Length);//清除字符串构造器的内容

           foreach (byte b  in list)
            {
               builder.Append(b.ToString("X2") + " ");
            }            
           string str = builder.ToString();

            if (!"".Equals(str) && str.Contains("0B")) {

               //这是以前的写法。。PowerMainForm是主程序,写了一个委托更改两个标签的文本。同一个项目里,不同的cs
                PowerMainForm.Show("准备扫描", "Please ready to scan!"); 
            }
}

现在都分开两个项目,不能直接引用。。各位指点下,我还能怎样通过SerialPort接收事件来更改主程序的控件文本,全部C币了。。
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • bdmh 2015-06-02 08:30
    已采纳

    发布一个回调事件,或者里面有一个公共事件,所有用的地方去绑定这个事件,就好像他是个按钮,你去绑定点击事件一样

    打赏 评论
  • threenewbee 2015-06-02 08:29

    相互引用当然报错,你需要将它们的引用关系转换为单向的。
    一般采用接口或者委托实现依赖倒置。
    提问不需要C币。但是最好一个问题只问一件事。如果采纳,可以写给你一个例子。

    打赏 评论
  • bdmh 2015-06-02 08:31
    打赏 评论
  • edouardzyc 2015-06-02 08:44

    两种实现:
    1. 把你主程序需要用到的类都抽象成接口,单独一个项目,你去引用接口的那个项目就不会互相引用了
    2. 委托,你主程序里定义个callback,委托给SerialPort处理

    打赏 评论

相关推荐 更多相似问题