delphi 如何知道我们每次调用TTetheringManager.AutoConnect时它何时完成?

pprl5pva  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(171)

我有一个通过 Delphi Tethering Components发送一些消息的应用程序。第一次调用TetheringManager1.AutoConnect()时,它触发了 TTetheringManager.OnEndAutoConnect。但是当我第二次调用它时,它没有触发事件,尽管它发现并连接到其他新设备。
我需要知道它什么时候完成连接,因为我想知道什么时候向所有应用程序发送消息是安全的。
每次调用AutoConnect时,如何知道它何时完成?
这是我的代码,我改编给你看。
活动:

procedure TFTetheringTest.TetheringManager1EndAutoConnect(Sender: TObject);
begin
  ConnectionFinished := True;
end;

调用-我将其改编并压缩到一个过程中,以便您了解背后的思想:

procedure TFTetheringTest.BtnSendMsgClick(Sender: TObject);
begin
  ConnectionFinished := False;
  TetheringManager1.AutoConnect();
  repeat
    Application.ProcessMessages;
  until ConnectionFinished;
  ConnectionFinished := False;
  // the sending
  for var I := 0 to TetheringAppProfileSender.ConnectedProfiles.Count - 1 do
  begin
      TetheringAppProfileSender.SendString(TetheringAppProfileSender.ConnectedProfiles.Items[I], 'msg', 'Test');
  end;
end;
wsewodh2

wsewodh21#

经过反复试验,我找到了触发*OnEndAutoConnect*事件的解决方案。该解决方案是在调用AutoConnect之前取消所有配对的管理器的配对。
这是我发现的每次调用AutoConnect时触发事件的唯一方法。

for var I := TetheringManager1.PairedManagers.Count - 1 downto 0 do
    TetheringManager1.UnPairManager(TetheringManager1.PairedManagers[I]);
  TThread.ForceQueue(nil,
    procedure
    begin
      TetheringManager1.AutoConnect();
    end);

相关问题