【问题标题】:How to invoke a form inside another form task如何在另一个表单任务中调用表单
【发布时间】:2019-03-24 10:55:16
【问题描述】:

在我的 Windows 窗体应用程序中,我创建了 2 个窗体。在表单 1 中,当我单击 button1 时,将启动一个新任务。在任务中,我创建了form2 的一个实例并显示form2。我正在调用Form2showData 方法。

//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


【解决方案1】:

正如肯尼建议的那样,我已经修改了代码。现在它按照我的预期运行。

 public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                Action act1 = (() =>
                {
                    Form2 form2 = new Form2();
                    form2.StartPosition = FormStartPosition.CenterParent;
                    form2.Show();
                });
                this.BeginInvoke(act1);
            });
        }
}

// FORM2

private void Form2_Load(object sender, EventArgs e)
        {
            test(1);
        }
        public void test(int a1)
        {
            Task.Factory.StartNew(() =>
            {
                for (int i = a1; i < 1000; i++)
                {
                    label1.Invoke(new MethodInvoker(delegate { label1.Text = i.ToString(); }));
                }
            });
        }

再次感谢肯尼

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多