在表格(F1)上我有一个按钮,如果我创建另一个表单(让我们称之为F2)并显示它没有问题
但是我想做这样的事情
我的应用程序中的某些线程正在运行连接并侦听来自服务器的消息.当消息到达时,我的主表单被注册以获得运行函数的事件.从该函数我正在尝试创建并显示F2类型表单(空,没有修改):它显示它然后它冻结我的应用程序.
更确切地说:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ConnectionManagerThread.getResponseListener().MessageReceived += Form1_OnMessageReceived;
}
private void Form1_OnMessageReceived(object sender, MessageEventArgs e) {
Form2 f2 = new Form2();
f2.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为原因是你正在执行跨线程操作.在创建form2之前,您需要在UI线程上创建表单.我认为以下内容对您有所帮助
public delegate void ShowForm(object sender, MessageEventArgs e);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ConnectionManagerThread.getResponseListener().MessageReceived += Form1_OnMessageReceived;
}
private void Form1_OnMessageReceived(object sender, MessageEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new ShowForm((Form1_OnMessageReceived), new object[] { sender, e }));
}
else
{
Form2 f2 = new Form2();
f2.Show();
}
}
}
Run Code Online (Sandbox Code Playgroud)