我做一个程序,是捕捉网络数据包的,
使用的是异步捕捉方法:
mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
然后在窗口上用一个datagridview显示捕捉到的数据,在回调函数中,将捕捉到的数据添加到datagridview的数据源上,以达到显示的目的
现在有一个问题是,当数据多了以后,垂直滚动条不会自动出现,我试过.Invalidate 和.Refresh方法,都不行,请问如何才能让滚动条自动出现,如果将窗口最大化,滚动条是可以出现的。
另外还有一个问题,如果在回调函数OnReceive中操作form上的控件,比如:dataGridView1.Refresh();会提示错误:“线程间操作无效,不是从创建控件datagridview1的线程上访问他”,这样要刷新就得用委托,
滚动条不能出现会不会和 是在 回调函数中修改datagridview的数据源有关。
更奇怪的是我写的另外一个程序,异步使用ping测试:
pingSender.PingCompleted += new PingCompletedEventHandler(PingCompletedCallback);
pingSender.SendAsync(ipAddress);
在这个回调函数PingCompletedCallback中,却能操作form上的控件,比如richTextBox1.AppendText(str);
为什么同样是异步函数,一个可以操作主程序上的控件,另外一个不可以,请大侠帮忙看看