-1

我正在做一个项目,我需要在另一个表单中运行一个表单,例如我有两个表单类:form1 和 form2

在表格1中:

public void func1()
{
  form2 f=new form2();
  f.show();
  Thread.sleep(2000);  
}

当我运行它时,f这是 form2 的一个实例挂起,直到线程在 2 秒后唤醒。

我尝试使用另一个线程,但它不能正常工作。我知道我应该使用InvokeBeginInvoke()但我不知道如何在这里使用它们。我是 Delegate 和 Invoke 的新手,我读的越多,我就越困惑!请帮我。

Edit1(更多信息) form1 是主表单,form2 是一个简单的表单,在 form1 中有一个按钮,我创建并显示 form2,如下所示:

public partial class Form1 : Form
    {

        public delegate void showdel();
        public Form2 f;
        public Form1()
        {
            InitializeComponent();
            f = new Form2();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(sstart);
            t.Start();
            Thread.Sleep(3000);
        }


        public void sstart()
        {
            f.Show();
        }

    }

但是当我运行这段代码时,form2 会出现片刻,然后很快就消失了。即使我为 sstart() 尝试此代码,它的工作原理也是一样的:

public void sstart()
        {
            if (f.InvokeRequired == true)

                f.BeginInvoke(new showdel(sstart));

            else
                f.Show();
        }

我还有挂起问题。但进一步我想控制form1中的form2,例如更改表单2的标题。不幸的是,我没有太多关于backgroundworker及其工作原理的信息?有人对此有任何参考吗?

4

1 回答 1

0

如果您只是想让 form2 启动并只显示两秒钟,我会在构造函数中添加一个计时器来关闭它。

    public Form2()
    {
        InitializeComponent();
        System.Windows.Forms.Timer Timer = new Timer();
        Timer.Interval = 2000;
        Timer.Enabled = true;
        Timer.Tick += new EventHandler(Timer_Tick);

    }
    private void Timer_Tick(object o, EventArgs a)
    {

            this.Close();
    }

可能是一种更好的方法(Backgroundworker等)。

于 2013-04-23T15:13:16.920 回答