我开发了一个GUI来通过以太网线捕获数据包。 为此,我有3个单独的函数,我在单独的线程中运行每个函数。
1) public void Capture_Click(object sender, EventArgs e) //packet capturing
2) public static void PacketHandler(Packet packet) // storing received packets and showing in dataGrid
3) public void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e) // I have Kept a button on each row to get packet details in more detail.
问题:当数据包到来时没有问题但是一旦数据包停止GUI现在冻结,我就无法点击DataGrid中的详细信息按钮。
建议可能的解决方案?
答案 0 :(得分:0)
您的ui线程中似乎正在接收(通用调试)软件包。解决方案可能是在后台工作者中执行此操作。这将允许您的ui同时更新和接收/处理您的传入包。
从MSDN:BackgroundWorker类允许您在a上运行操作 独立的专用线程。下载等耗时的操作 和数据库事务可能会导致您的用户界面(UI) 就好像它们在运行时停止响应一样。当你 想要一个响应式用户界面,你将面临长时间的延迟 通过这样的操作,BackgroundWorker类提供了方便 溶液