如何从以客户端服务器为中心的不同命名空间填充 ListView



此程序是使用异步套接字的客户端服务器程序。我的服务器端工作得很好,我遇到问题的客户端正在接收从服务器端发送的数据,但数据无法填充到ListView中,如果我使用消息框显示消息,它工作正常,但填充它ListView成为问题。

读取回调

此方法是从服务器接收数据的异步方法,然后将其输出提供给从不同类调用的第二个方法。

private static void ReadCallBack(IAsyncResult ar)
{
try
{
string content = String.Empty;
objectState state = (objectState)ar.AsyncState;
Socket handler = state.wsocket;
int byteread = handler.EndReceive(ar);
if (byteread > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, byteread));
content = state.sb.ToString();
if (content.IndexOf("<EOF>", StringComparison.Ordinal) > 0)
{
userControls.UCInventoryHome uci = new userControls.UCInventoryHome();
inventory inv = new inventory();
inv.fetchitemAll(content, uci.listView1);
}
else
{
handler.BeginReceive(state.buffer, 0, objectState.bufferSize, 0, new AsyncCallback(ReadCallBack), state);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

获取项目全部

实现ListView的填充,而最后一个方法是驻留在不同类和命名空间中的ListView的事件处理程序。

public void fetchitemAll(string stream, ListView listv)
{
string[] reader = stream.Split(',');
try
{
if (stream.IndexOf("<EOF>", StringComparison.Ordinal) > 0)
{
ListViewItem lv = new ListViewItem();
lv.Text = reader[0];
lv.SubItems.Add(reader[1]);
lv.SubItems.Add(reader[2]);
lv.SubItems.Add(reader[3]);
lv.SubItems.Add(reader[4]);
lv.SubItems.Add(reader[5]);
lv.SubItems.Add(reader[6]);
lv.SubItems.Add(reader[7]);
lv.SubItems.Add(reader[8]);
lv.SubItems.Add(reader[9]);
lv.SubItems.Add(reader[10]);
lv.SubItems.Add(reader[11]);
lv.SubItems.Add(reader[12]);
lv.SubItems.Add(reader[13]);
listv.Items.Add(lv);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnUCInventoryHomeViewAll_Click(object sender, EventArgs e)
{
sv.sender("fetchItemReceiptNoCondition,N00n,N00n," + Environment.UserName + ",192.168.0.11," + publicva.port + ", <EOF>", "192.168.0.10", 4343);// this code sent instruction to the server to fetch an information
}

fetchitemAll中,由于reader是字符串列表,因此您可以单独将它们添加到listv中,而无需创建ListViewItem

foreach (var item in reader)
{
listv.Items.Add(item);
}

最新更新