OnClientConnect静态方法

时间:2016-11-07 13:05:02

标签: c# winforms

我正在编写客户端服务器应用程序,我的服务器是WinForm。 我正在尝试从静态方法创建子窗体

private static void OnClientConnect(IAsyncResult asyn)
{
    try
    {
        TcpClient clientSocket = default(TcpClient);

        clientSocket = _listener.EndAcceptTcpClient(asyn);
        clientSocket.ReceiveBufferSize = 1024;
        frmClient frmClient = new frmClient(clientSocket);
        frmClient.Show(this);               

    }
    catch (Exception se)
    {
        throw;
    }

    WaitForClientConnect();
}

但是" 这个"不接受因为我在静态方法中使用它。

我还尝试创建静态字段并使用它。 但也抛出交叉线程异常。

任何建议。?

1 个答案:

答案 0 :(得分:0)

您可以将MDI父窗口存储在静态变量中,如

public static Form RootForm;

然后你可以展示一个新的MDI孩子,像这样考虑交叉线程。

public static void ShowFormForClient(TcpClient clientSocket) {
  // check if we are on a different thread and redirect if so
  if (RootForm.InvokeRequired) {
     RootForm.Invoke((MethodInvoker) delegate { ShowFormForClient(clientSocket); });
     return;
  }
  var frmClient = new frmClient(clientSocket);
  frmClient.MdiParent = RootForm;
  frmClient.Show();
}

请注意,此代码未经过任何方式测试,仅用于演示目的。