步骤是这样,首先在TagSelect这个界面上点击扫描按钮,发送一条指令到串口
然后在另一个cs文件里,串口返回数据,数据通过方法的调用又回到TagSelect界面
最后在TagSelect界面把数据显示在listview上
然后问题来了,这个listview里有数据,而且代码执行到这一步来了,但是listview里就是不显示数据

解决方案 »

  1.   

    公司的东西都加密了,图都发不出去..只能贴一些代码,这是第一步,在TagSelect这个界面上点击扫描按钮,发送一条指令到串口if (btn_scanning.Text.Equals("扫描"))
                {
                    listView1.Items.Clear();
                    btn_scanning.Text = "停止";
                    ReadWriteIO.order(Cmd.continuous, "00000000");//发送数据到串口
                }
      

  2.   

    这是第二步,在另一个cs文件里,串口返回数据,数据通过方法的调用又回到TagSelect界面
    int count = comm.BytesToRead;
                    byte[] data = new byte[count];
                    comm.Read(data, 0, count);//读取串口返回的数据                TagSelect ts = new TagSelect();
                    if (count > 0)
                    {
                        ts.getdata(data);//调用TagSelect的方法将数据传过去
                    }
      

  3.   

    回到TagSelect这个界面,把数据显示到listview上ListViewItem lvi = new ListViewItem();
                                lvi.Text = string.Join(" ", Regex.Matches(pc, @"..").Cast<Match>().ToList());
                                lvi.SubItems.Add(string.Join(" ", Regex.Matches(epc, @"..").Cast<Match>().ToList()));
                                lvi.SubItems.Add("1111111");
                                lvi.SubItems.Add("");
                                listView1.Items.Add(lvi);
      

  4.   

    如果你的 comm.Read(data, 0, count); 方法是在 Received事件里的话  你要通过委才能访问UI线程  我的猜想哦
      

  5.   

    查看你是否添加数据到listview里了
      

  6.   

    如果你写TagSelect ts = new TagSelect();那么你创建了一个新的窗口,而且还没有 ts.Show(),你当然看不到。
      

  7.   

    对于中高级的程序员(没办法,我们暂且把工作8个月以上、接受过培训的人认为是中级程序员吧),这是一个设计模式问题,就是在负责串口通讯的那个独立组件应该设计一个事件通知,比如public event Action<string> 有消息到来啦;然后窗口就好像使用普通的什么 TextBox 之类的控件一样地,注册事件处理方法,并且将参数中的消息内容(string 类型)传给自己的控件显示。对于初级程序员,你可以在负责串口通讯的独立组件中尝试直接访问目标窗口。只不过这高度耦合,通讯组件再也不能当作独立服务而复用,其实是个反模式的设计。
      

  8.   

    有数据的,我把这段代码放到其他地方,listview都能显示出来