2

TTCPServer を使用して Delphi 6 で 1 つのネットワーク アプリケーションをプログラミングしています。このコンポーネントの 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;
4

1 に答える 1

0

最後に答えを見つけてください。Indy コンポーネントでは、TidSync または TidNotify を使用できます。それを作成し、メソッドのパラメータを使用して Synchronize メソッドを呼び出します。このメソッドはメイン スレッド (UI) で実行され、スレッド セーフです。TTCPServer の解決策は見つかりませんが、Timer を使用できます。その間隔をたとえば 100 に設定し、その目盛りで showmodal を実行します。ただし、複数同時に実行することを忘れないでください。たとえば、OnTimer では、次の OnTimer イベントを処理するために、新しい接続の受信を無効にするか、それらを配列に保存する必要があります。

于 2012-06-11T17:01:54.057 に答える