GUI在执行期间冻结

本文关键字:冻结 执行期 GUI | 更新日期: 2023-09-27 18:10:21

我开发了一个通过以太网电缆捕获数据包的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中的详细信息按钮。

建议可能的解决方案?

GUI在执行期间冻结

看起来你正在ui线程中接收(通灵调试)包。一个解决方案可能是在后台工作人员中完成这项工作。这将允许你的ui在同一时间更新和接收/处理你的传入包。

MSDN Backgroundworker

从MSDN

: BackgroundWorker类允许您运行一个操作单独的专用螺纹。耗时的操作,比如下载和数据库事务可能会导致您的用户界面(UI)看起来很混乱就好像它在运行时停止了响应。当你想要一个响应灵敏的UI,你就会面临相关的长时间延迟有了这样的操作,BackgroundWorker类提供了一个方便的解决方案。