假设我有一个表单 Foo。即使主应用程序线程可能正忙于做其他事情,我如何创建一个在它自己的线程中运行并得到更新的实例?例如处理阻塞网络通信或类似的东西。
我了解基本原理,并且我需要创建一个新线程,在该线程中创建表单实例等。但是我认为我需要该线程/窗口的更新循环,我完全不确定它应该是什么样子。
假设我有一个表单 Foo。即使主应用程序线程可能正忙于做其他事情,我如何创建一个在它自己的线程中运行并得到更新的实例?例如处理阻塞网络通信或类似的东西。
我了解基本原理,并且我需要创建一个新线程,在该线程中创建表单实例等。但是我认为我需要该线程/窗口的更新循环,我完全不确定它应该是什么样子。
除了主应用程序线程之外,您不应在线程中创建表单,因为 Windows 消息队列仅与此主线程相关联。
换个思路:为了确保您的表单始终保持更新和响应,请为繁忙的工作(例如处理阻塞 newtork 通信等)创建单独的线程,而不是为表单创建单独的线程。在这种情况下,创建新线程后,主窗体继续从其队列中抽取消息,而不同线程中的函数正在执行您需要的脏工作。PostMessage()
当工作线程完成时,它可以使用WinAPI 函数将结果通知主线程。您应该只为表单中的此类自定义消息提供处理程序,它们将与工作线程无缝通信。
此外,如果您的“忙碌工作”不是很复杂,您甚至可以在没有额外线程的情况下进行处理,方法是在表单线程中运行您的工作,并且ProcessMessages()
不时调用函数,以保持表单更新。