C# 无法对控件调用Invoke或BeginInvoke。。。甚至使用CreateControl()也可以
我无法从我的表单1修改属于表单2的元素C# 无法对控件调用Invoke或BeginInvoke。。。甚至使用CreateControl()也可以,c#,invoke,C#,Invoke,我无法从我的表单1修改属于表单2的元素 public partial class Project : Form { public Form2 form = new Form2(); public Project() { InitializeComponent(); } private void Project_Load(object sender, EventArgs e) { form.CreateContro
public partial class Project : Form
{
public Form2 form = new Form2();
public Project()
{
InitializeComponent();
}
private void Project_Load(object sender, EventArgs e)
{
form.CreateControl();
}
private void buttonOpenForm2_Click(object sender, EventArgs e)
{
form.Show();
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
var indata = *whatever serial input data here*
bool result = Int32.TryParse(indata, out int data);
if (result) {
form.chart1.Invoke(new Action(() => { form.chart1.Series[0].Points.AddY(data); }));
}
}
每当我按下按钮以显示Form2及其图表时,form.chart1.Invoke中都会引发异常。在创建窗口句柄之前,无法对控件调用Invoke或BeginInvoke
如果我强制窗体执行CreateControl,为什么会发生这种情况?错误消息会告诉您出了什么问题 在保存图表的form2完全创建之前,串行端口已启动 我想你可以看看这面可见的旗子,可能还有很多其他的
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
...
if(!form?.Visible)
return;
form.chart1.Invoke(...
假设它不可见,您就不想显示数据
进一步阅读
应用程序启动和关闭事件
窗体和控件类公开了一组与
应用程序启动和关闭。当Windows窗体应用程序
启动时,主窗体的启动事件在
顺序如下:
Control.HandleCreated
Control.BindingContextChanged
形式.加载
控件。可见更改
形式。激活
表格。如图所示
Windows窗体在封面下使用Windows User32、Gdi32和其他传统的Windows库。实例化表单对象时,将为Windows窗口创建一个空心包装器。当您显示窗体时,一个复杂的舞蹈开始,在某一点上调用传统的窗口创建函数来创建窗口和窗口的窗口句柄。在那之前,有些事情你不能做。因此,在Form2完全完成自身创建之前,它肯定是由Form.Load事件完成的,您不能调用表单上的任何内容