2

如果我在处理某些数据的线程中有一个函数,那么它会调用一个回调函数来更新 UI 中的状态。

如果 UI 需要时间来处理回调函数,那么它就没有多大用处。除了在回调函数中处理更新之外,它是否应该以不阻塞的方式向 UI 发送某种消息?

我的意思是当在处理函数中并且我调用更新状态函数时,这应该立即返回到处理函数,然后在更新中它可以等待所有它想要的 UI 更新完成。

还是我需要第三个线程来处理向 UI 发送更新数据?

4

3 回答 3

2

通常有一种方法可以在不阻塞的情况下将回调发布到 UI 线程。

例如:

我敢肯定,如果您查看正在使用的 UI 工具包的文档,您会发现类似的东西。

于 2008-10-20T06:32:20.310 回答
2

在 .NET(WinForms、WPF、Silverlight)中,您只需使用 UI 线程上的 Dispatcher 对象来调用用户界面的更新方法。调度程序既可以同步调用(使用 Invoke),也可以异步调用(使用 BeginInvoke/EndInvoke)。请注意,在 .NET 中,需要为每个 BeginInvoke 调用 EndInvoke(因为 .NET 不保证异步句柄将被释放),因此默认情况下 Fire and Forget 不是一个选项(除非您实现你自己的FireAndForget

于 2008-10-20T06:32:50.730 回答
0

Mapad 在此处发布了指向 UI 和线程的链接,您可能会发现它很有用。你没有提到哪个 UI 工具包和哪种语言,所以我不能给你任何细节。

于 2008-10-20T06:27:46.510 回答