我在做一个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);
        }请问是怎么回事,那位好心人给我说下,小弟先谢谢了。

解决方案 »

  1.   

    假如把结果输出到textbox是什么效果呢?
      

  2.   

    补充一下,我在界面中加了ToolStrip,用的图标有7、8个
      

  3.   

    现在发现,如果等所有包抓完后再
    dataGridView1.DataSource = dt.DefaultView; 
    的话,程序好象就不卡死了,请问是怎么回事哦?
    有人回答么?
      

  4.   

    那就应该是在停止截获数据的时候再给datagridview指定数据源
    或者干脆直接在datagridview里面添加新行
      

  5.   

    恩,谢谢cnfixit 终于知道该怎么改了,现在抓了1000个包没出问题。