1

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

有问题的gui问题-> SelectedNode = .Nodes [0]上的线程异常

4

3 回答 3

2

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

于 2009-04-08T10:24:33.637 回答
1

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

于 2009-04-08T10:33:12.197 回答
0

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

如果您不想分发Control实例,则可以为外部代码提供一个ISynchronizeInvoke实例(任何控件都会这样做,或者编写自己的类来包装aControl以防止调用者强制转换)。然后调用者可以使用它来执行方法。

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

于 2009-04-08T10:34:36.810 回答