1)构造
   class aaa
    FormAbount _f;
   public aaa(FormAbount f)
    {
         _f=f;
         f.text.....
    }
2)静态
     定义一个静态类 list<string> 
     接收类不停外立面插入数据
     窗体用TIMER每个一段时间获取数据
3)委托  建议用这种方式
      代码清晰度最高

解决方案 »

  1.   

    我也做了一个上位机 跟你差不多 用的是委托..代码差不多就是这个意思..form代码delegate void Write(string msg);
    void write(string msg)
            {
                if (listBox1.InvokeRequired)
                {
                    listBox1.Invoke(new Write(write), msg);
                }
                else
                {
                    listBox1.Items.Insert(0, msg);
                }
            }
    然后在类里面写了
    public delegate void Write(string msg);
    public  class ByteDataHandle
    {
     public Write write;
     public static void xxoo(string ooxx)
     {
       write("xxoo");
     }
    }
    调用就是 ByteDataHandle handle = new ByteDataHandle();
     handle.write = write;里面就可以输出了...或者给控件赋值啥的
      

  2.   

    ByteDataHandle是重新定义一个类吗?
      

  3.   


    撸主不懂的用事件? 公共类不应去调用UI的东西 ,而是通过事件把数据向外输出这样就离了与UI上的代码交互了。就不用考虑UI调还是不调,由调用者去决定。
      

  4.   


          public class ComMachine
            {
                public event Action<string> Changed;            private void OnChanged(string strValue)
                {
                    if (Changed != null)
                    {
                        Changed(strValue);
                    }
                }
                public void Process()
                {
                   //类内部干活
                    for (int i = 0; i < 10; i++)
                    {
                        OnChanged(i.ToString());//数所输出到事件
                    }
                }
            }
    调上面的公共类ComMachine mac = new ComMachine();
    mac.Changed += new Action<string>(mac_Changed); //实列化后绑定事件
    mac.Process();//
    void mac_Changed(string obj)
    {
               //外部取结果
    }
      

  5.   

    ByteDataHandle handle = new ByteDataHandle();  
    handle.write = write;
    报错误:
    错误 1 无法使用实例引用来访问成员“HSVG.Tcp.write”;请改用类型名来限定它