【发布时间】:2019-03-24 10:55:16
【问题描述】:
在我的 Windows 窗体应用程序中,我创建了 2 个窗体。在表单 1 中,当我单击 button1 时,将启动一个新任务。在任务中,我创建了form2 的一个实例并显示form2。我正在调用Form2 的showData 方法。
//Form1
public event TickHandler Tick;
public EventArgs e = null;
public delegate void TickHandler(int a1, EventArgs e);
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
{
Form2 form2 = new Form2();
form2.Show();
}
}
//Form2
public void showData(Form1 m)
{
m.Tick += new Form1.TickHandler(test);
}
public void test(int a1,EventArgs e)
{
Task.Factory.StartNew(() =>
{
for (int i = a1; i < 1000; i++)
{
label1.Invoke(new MethodInvoker(delegate { label1.Text = i.ToString(); }));
}
});
}
【问题讨论】:
-
在 UI 元素上执行任何操作时调用,包括 new Form2()
-
我添加了 Invoke,但它在 form2 中的测试方法上显示错误消息,例如“在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke。”
-
移动该代码以在表单上的 Loaded 事件上执行
标签: c# task begininvoke