【发布时间】:2012-04-30 08:22:14
【问题描述】:
我有一个 TCP 服务器应用程序并有一个用于与 TCP 客户端通信的线程。当我从客户端接收数据时,我想使用此数据创建一个新表单,但我无法在线程中创建表单。我可以使用按钮单击事件轻松创建表单。
我哪里错了?
谢谢。
【问题讨论】:
标签: c# multithreading forms
我有一个 TCP 服务器应用程序并有一个用于与 TCP 客户端通信的线程。当我从客户端接收数据时,我想使用此数据创建一个新表单,但我无法在线程中创建表单。我可以使用按钮单击事件轻松创建表单。
我哪里错了?
谢谢。
【问题讨论】:
标签: c# multithreading forms
【讨论】:
完成这项工作的示例代码:
private void Button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(StartMe);
t1.Name = "Custom Thread";
t1.IsBackground = true;
t1.Start();
}
private void StartMe()
{
//We are switching to main UI thread.
TextBox1.Invoke(new InvokeDelegate(InvokeMethod), null);
}
public void InvokeMethod()
{
//This function will be on main thread if called by Control.Invoke/Control.BeginInvoke
MyForm frm = new MyForm();
frm.Show();
}
【讨论】:
您必须在某处更改 GUI 线程的上下文以创建新表单 - 在某处,您将需要 BeginInvoke() 一些东西。
这是什么类型的服务器 - 是一个“经典”同步服务器,其中每个客户端连接都有一个侦听线程和一个服务器客户端线程?
您不想在客户端连接时创建表单,您只想在连接的客户端特别询问时创建此表单,是吗?
【讨论】: