2

我正在为 Delphi 使用 Synapse,但是在 HTTP 下载期间,当然,GUI 会冻结。查看文档,他们建议使用 OnHeartbeat 方法。

(见http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat

不幸的是,他们实际上并没有给出任何代码示例,虽然概念很简单,但用法并不明显。

这是每个套接字(对象)设置,还是每个应用程序(类)设置?另外,回调过程本身被定义为一个对象,这有点不寻常。有谁真正使用过这个愿意分享一个示例代码片段吗?

4

1 回答 1

2

尽管我建议在单独的线程中运行您的下载,但阅读文档时您必须将事件处理程序挂钩到 OnHeartBeat 事件。

在那个事件处理程序中,您可以调用Application.ProcessMessages(),但这很危险,因为事件可能在您真正想要它们之前被触发。我将使用自定义方法仅调用 Paint 例程。您可以将表单的句柄作为参数传递,或者将任何控件强制转换为 TWinControl 并使用句柄属性。这只会重新绘制表单/控件,但不允许鼠标/键盘交互。

procedure AllowRepaints(h: HWND);
var
  m: tMsg;
begin
  while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do
    DispatchMessage(m);
end;
于 2009-11-29T19:39:14.220 回答