在C#中使用winform的FIFO

时间:2009-04-08 10:22:29

标签: c# fifo

我对线程中的GUI问题感到恼火。我如何创建一个FIFO,以便我的主表单/线程将接收数据来做事情,而不是让我的线程使用回调并自己运行代码(并失败)?

有问题的gui问题 - > Thread exception on SelectedNode = .Nodes[0]

3 个答案:

答案 0 :(得分:2)

使用SynchronizationContextPost / Send“调用”到UI线程。

答案 1 :(得分:1)

Winform控件上的BeginInvoke,用于跨线程调用,将使用Window的消息队列,即FIFO。

答案 2 :(得分:0)

如果您拥有主表单(或任何控件)的句柄,则可以使用Control.Invoke / Control.BeginInvoke

如果您不想分发Control实例,可以为外部代码提供ISynchronizeInvoke实例(任何控件都可以执行此操作,或编写自己的包装< / em> a Control以防止调用者转换)。然后调用者可以使用它来执行方法。

最后,考虑使用事件;正在运行的代码会引发UI处理的事件;然后,UI可以在本地调用Control.Invoke来处理数据。