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币了。。

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

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

通过委托自定义事件,参考
http://www.cnblogs.com/huomm/archive/2007/12/04/982869.html

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