我在做一个SNIFFER程序,
我在抓包时,程序卡死了,没网络数据或数据少就没问题,数据一但多需要滚动条时就出问题,但是自己向Datagridview里面加数据不管加多少都没问题
部分代码如下,
private void Form1_Load_1(object sender, EventArgs e)
{
........
dt = new DataTable();
dt.Columns.Add("顺序", System.Type.GetType("System.String"));
............
dataGridView1.DataSource = dt.DefaultView;
..........
}
private void tsbStart_Click(object sender, EventArgs e)
{
.......
mainSocket.BeginReceive(byteData, 0,byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
........
mainSocket.close();
}
private void OnReceive(IAsyncResult ar)
{
try
{
int nReceived = mainSocket.EndReceive(ar);
ParseData(byteData, nReceived);
if (tsbStartflag)
{
byteData = new byte[4096];
mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
}
}
}
private void ParseData(byte[] byteData, int nReceived)
{
......
IPHeader ipHeader = new IPHeader(byteData, nReceived);
switch (ipHeader.ProtocolType)
{
case Protocol.TCP: TCPHeader tcpHeader = new TCPHeader(ipHeader.Data,
ipHeader.MessageLength);
grid(ipHeader,tcpHeader); break; }
.......
} private void grid(IPHeader ipHeader,TCPHeader tcpHeader)
{
dr = dt.NewRow();
x = x + 1;
dr[0] = x;
dr[1] = ipHeader.SourceAddress;
dr[2] = tcpHeader.SourcePort;
dr[3] = ipHeader.DestinationAddress;
dr[4] = tcpHeader.DestinationPort;
dr[5] = "TCP";
dt.Rows.Add(dr);
}请问是怎么回事,那位好心人给我说下,小弟先谢谢了。
我在抓包时,程序卡死了,没网络数据或数据少就没问题,数据一但多需要滚动条时就出问题,但是自己向Datagridview里面加数据不管加多少都没问题
部分代码如下,
private void Form1_Load_1(object sender, EventArgs e)
{
........
dt = new DataTable();
dt.Columns.Add("顺序", System.Type.GetType("System.String"));
............
dataGridView1.DataSource = dt.DefaultView;
..........
}
private void tsbStart_Click(object sender, EventArgs e)
{
.......
mainSocket.BeginReceive(byteData, 0,byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
........
mainSocket.close();
}
private void OnReceive(IAsyncResult ar)
{
try
{
int nReceived = mainSocket.EndReceive(ar);
ParseData(byteData, nReceived);
if (tsbStartflag)
{
byteData = new byte[4096];
mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
}
}
}
private void ParseData(byte[] byteData, int nReceived)
{
......
IPHeader ipHeader = new IPHeader(byteData, nReceived);
switch (ipHeader.ProtocolType)
{
case Protocol.TCP: TCPHeader tcpHeader = new TCPHeader(ipHeader.Data,
ipHeader.MessageLength);
grid(ipHeader,tcpHeader); break; }
.......
} private void grid(IPHeader ipHeader,TCPHeader tcpHeader)
{
dr = dt.NewRow();
x = x + 1;
dr[0] = x;
dr[1] = ipHeader.SourceAddress;
dr[2] = tcpHeader.SourcePort;
dr[3] = ipHeader.DestinationAddress;
dr[4] = tcpHeader.DestinationPort;
dr[5] = "TCP";
dt.Rows.Add(dr);
}请问是怎么回事,那位好心人给我说下,小弟先谢谢了。
dataGridView1.DataSource = dt.DefaultView;
的话,程序好象就不卡死了,请问是怎么回事哦?
有人回答么?
或者干脆直接在datagridview里面添加新行