我对线程中的GUI问题感到恼火。我如何创建一个FIFO,以便我的主表单/线程将接收数据来做事情,而不是让我的线程使用回调并自己运行代码(并失败)?
有问题的gui问题 - > Thread exception on SelectedNode = .Nodes[0]
答案 0 :(得分:2)
使用SynchronizationContext向Post
/ Send
“调用”到UI线程。
答案 1 :(得分:1)
Winform控件上的BeginInvoke,用于跨线程调用,将使用Window的消息队列,即FIFO。
答案 2 :(得分:0)
如果您拥有主表单(或任何控件)的句柄,则可以使用Control.Invoke
/ Control.BeginInvoke
。
如果您不想分发Control
实例,可以为外部代码提供ISynchronizeInvoke
实例(任何控件都可以执行此操作,或编写自己的包装< / em> a Control
以防止调用者转换)。然后调用者可以使用它来执行方法。
最后,考虑使用事件;正在运行的代码会引发UI处理的事件;然后,UI可以在本地调用Control.Invoke
来处理数据。