【问题标题】:GUI freezes during executionGUI 在执行期间冻结
【发布时间】:2014-08-15 13:56:01
【问题描述】:

我开发了一个 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 中的详细信息按钮。

建议可能的解决方案?

【问题讨论】:

  • 这些函数有多少在单独的线程中执行并不明显。您没有提供足够的代码来明确问题。您在所有三个线程中如何执行 UI 操作也远不清楚。
  • @DavidHeffernan 我正在使用 public Thread StartTheThread(object sender, EventArgs e) { var t = new Thread(() => Capture_Click(sender, e)) 为每个函数创建新线程; t.Start();返回 t; }
  • 看起来不太对,但对于用 cmets 编写的有限摘录,我几乎无能为力

标签: c# capture freeze ethernet


【解决方案1】:

您的 ui 线程中似乎正在接收(心理调试)包。一个解决方案可能是在后台工作人员中执行此操作。这将允许您的用户界面同时更新和接收/处理您的传入包。

MSDN Backgroundworker

来自 MSDN:BackgroundWorker 类允许您在 单独的专用线程。下载等耗时的操作 和数据库事务可能会导致您的用户界面 (UI) 看起来 好像它在它们运行时停止响应一样。当你 想要一个响应式 UI 并且您面临相关的长时间延迟 通过这样的操作,BackgroundWorker 类提供了一个方便的 解决方案。

【讨论】:

  • 我对事件处理不太了解,只能解释一下如何使用后台工作人员?
  • 查看 msdn 文档。我非常完整地解释了它是如何工作的。
  • 除了后台worker还有其他方法可以解决吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2018-04-15
  • 2023-03-14
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多