我正在使用TTCPServer在delphi 6中编写一个网络应用程序。在这个组件的OnAccept事件中,我将showmodal称为另一个表单。这导致挂起主窗体。我认为这是因为线程,但我不知道如何在这个事件中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;
答案 0 :(得分:0)
终于找到了答案。使用Indy组件,我们可以使用TidSync或TidNotify。创建它并使用方法的参数调用then的Synchronize方法。这个方法在主线程(UI)上运行,它是线程安全的。 我找不到TTCPServer的任何解决方案,但我们可以使用Timer。将其Interval设置为例如100,并以此为单位执行showmodal。但不要忘记同时运行多个。例如,在OnTimer中,您必须禁用接收新连接或将它们保存在数组中以处理下一个OnTimer事件。