目前我正在测试Ararat Synapse在Delphi发送电子邮件.
本地函数创建TSMTPSend并发送电子邮件.
我怎样才能中止这个操作?
我已经设置了一个分配给SMTP.Sock.OnStatus的回调函数来执行一些状态输出.
当我想中止发送进度时,我想我可以在回调函数中使用TSMTPSend的TTCPBlockSocket,因为在这个函数中我无法直接访问TSMTPSend.
我想做的事情看起来基本上就像
MyCallBack(Sender: TObject; Reason: THookSocketReason; const Value: string);
begin
  if FCancelWasClicked then
  begin
    if Sender is TTCPBlockSocket then
      TTCPBlockSocket(Sender).StopFlag := True;
      // or TTCPBlockSocket(Sender).AbortSocket or CloseSocket
  end;
end;
但StopFlag显示没有效果,AbortSocket/CloseSocket导致StackOverFlow,因为套接字将无休止地抽取HR_CloseSocket消息.
我做错了吗?还有其他选择吗?
Synapse提供心跳功能,允许实现取消行为.
http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat
处理OnHeartbeat事件,将HeartbeatRate属性设置为心跳之间的间隔,并设置StopFlag以取消操作.
| 归档时间: | 
 | 
| 查看次数: | 698 次 | 
| 最近记录: |