然后在另一个cs文件里,串口返回数据,数据通过方法的调用又回到TagSelect界面
最后在TagSelect界面把数据显示在listview上
然后问题来了,这个listview里有数据,而且代码执行到这一步来了,但是listview里就是不显示数据
9 个解决方案
#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
好像是这样的,你能详细说一下么,大佬有解决过这样的问题么。。。我看了一下委托,但是看不大明白
#9
有数据的,我把这段代码放到其他地方,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
好像是这样的,你能详细说一下么,大佬有解决过这样的问题么。。。我看了一下委托,但是看不大明白
#9
有数据的,我把这段代码放到其他地方,listview都能显示出来