MDI表单从OnClientConnect静态方法
本文关键字:静态方法 OnClientConnect 表单 MDI | 更新日期: 2023-09-27 18:16:56
我正在编写客户端服务器应用程序,我的服务器是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();
}
但是"this"不被接受,因为我在静态方法中使用它。
我也尝试创建一个静态字段来保存它并使用它。但是也会抛出跨线程异常。
有什么建议?
您可以将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();
}
请注意,这段代码没有以任何方式进行测试,仅用于演示。