delphi 有没有人有一个很好的例子,如何使用Synapse的心跳功能?

gfttwv5a  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(173)

我正在使用 Delphi 的Synapse,但是当在HTTP下载过程中时,GUI当然会冻结。查看文档,他们建议使用OnHeartbeat方法。
(See(第10页)
不幸的是,他们实际上没有给予任何代码示例,虽然概念很简单,但用法并不明显。
这是每个套接字(对象)设置,还是每个应用程序(类)设置?另外,回调过程本身被定义为一个对象,这有点不寻常。任何实际使用过它的人愿意分享一个示例代码片段吗?

bwitn5fc

bwitn5fc1#

尽管我建议在单独的线程中运行下载,但阅读文档时,您必须将事件处理程序与OnHeartBeat事件挂钩。
在该事件处理程序中,您可以调用Application.ProcessMessages(),但这样做很危险,因为可能会在您真正需要事件之前触发它们。我将使用一个自定义方法来只调用Paint例程。您可以只将窗体的句柄作为参数传递,或者将任何控件转换为TWinControl并使用handle属性。这将只会重新绘制窗体/控件。但不允许鼠标/键盘交互。

procedure AllowRepaints(h: HWND);
var
  m: tMsg;
begin
  while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do
    DispatchMessage(m);
end;

相关问题