我正在使用 Delphi 的Synapse,但是当在HTTP下载过程中时,GUI当然会冻结。查看文档,他们建议使用OnHeartbeat方法。(See(第10页)不幸的是,他们实际上没有给予任何代码示例,虽然概念很简单,但用法并不明显。这是每个套接字(对象)设置,还是每个应用程序(类)设置?另外,回调过程本身被定义为一个对象,这有点不寻常。任何实际使用过它的人愿意分享一个示例代码片段吗?
bwitn5fc1#
尽管我建议在单独的线程中运行下载,但阅读文档时,您必须将事件处理程序与OnHeartBeat事件挂钩。在该事件处理程序中,您可以调用Application.ProcessMessages(),但这样做很危险,因为可能会在您真正需要事件之前触发它们。我将使用一个自定义方法来只调用Paint例程。您可以只将窗体的句柄作为参数传递,或者将任何控件转换为TWinControl并使用handle属性。这将只会重新绘制窗体/控件。但不允许鼠标/键盘交互。
Application.ProcessMessages()
procedure AllowRepaints(h: HWND); var m: tMsg; begin while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do DispatchMessage(m); end;
1条答案
按热度按时间bwitn5fc1#
尽管我建议在单独的线程中运行下载,但阅读文档时,您必须将事件处理程序与OnHeartBeat事件挂钩。
在该事件处理程序中,您可以调用
Application.ProcessMessages()
,但这样做很危险,因为可能会在您真正需要事件之前触发它们。我将使用一个自定义方法来只调用Paint例程。您可以只将窗体的句柄作为参数传递,或者将任何控件转换为TWinControl并使用handle属性。这将只会重新绘制窗体/控件。但不允许鼠标/键盘交互。