我正在编写客户端服务器应用程序,我的服务器是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();
}
但是" 这个"不接受因为我在静态方法中使用它。
我还尝试创建静态字段并使用它。 但也抛出交叉线程异常。
任何建议。?
答案 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();
}
请注意,此代码未经过任何方式测试,仅用于演示目的。