gpt4 book ai didi

delphi - TTCPServer onAccept 上的 ShowModal 导致应用程序挂起?

转载 作者:行者123 更新时间:2023-12-03 18:50:21 26 4
gpt4 key购买 nike

我正在使用 TTCPServer 在 delphi 6 中编写一个网络应用程序。在此组件的 OnAccept 事件中,我为另一个表单调用 showmodal。这导致挂起主窗体。我认为这是因为线程,但我不知道如何在这个事件中显示表单。我真的不得不这么称呼。
我很感激任何答案。谢谢。

var
s: array[0..10000] of byte;
i, j: integer;
Str : String;
Request, UN, Pass: WideString;
StartItemNode : IXMLNode;
st: TStringStream;
begin
CoInitialize(nil);

i := ClientSocket.ReceiveBuf(s, 10000, 0);

Str := '';
for j := 0 to i - 1 do
Str := Str + AnsiChar(s[j]);

XMLDoc.XML.Text := Str;
XMLDoc.Active := true;
StartItemNode := XMLDoc.ChildNodes.FindNode('r');
Request := StartItemNode.ChildNodes['request'].Text;

if(Request = 'Order')then
begin
Memo1.Lines.Text := Str;
ClientSocket.Sendln('<?xml version="1.0" encoding="utf-8"?><r><answer result="OK"></answer></r>');

**Form2.ShowModal;**
end;

最佳答案

终于找到答案了。对于 Indy 组件,我们可以使用 TidSync 或 TidNotify。创建它并使用方法的参数调用 then 的 Synchronize 方法。此方法在主线程(UI)上运行,它是线程安全的。
我找不到 TTCPServer 的任何解决方案,但我们可以使用 Timer。将它的间隔设置为例如 100 并在那个时刻做你的显示模式。但不要忘记同时运行不止一个。例如在 OnTimer 中,您必须禁用接收新连接或将它们保存在数组中以处理下一个 OnTimer 事件。

关于delphi - TTCPServer onAccept 上的 ShowModal 导致应用程序挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com