从自定义类调用Invoke方法

时间:2010-12-16 18:15:02

标签: c#

我遇到了这样的问题

My form doesn't properly display when it is launched from another thread

现在我的问题是如何从自定义类调用Invoke方法而不是从Form

调用
void call_thread()
    {

        Thread t = new Thread(new ThreadStart(this.ShowForm1));
        t.Start();

    }

 delegate void Func();
    private void ShowForm1()
    {            
        if (this.InvokeRequired) //error
        {
            Func f = new Func(ShowForm1);
            this.Invoke(f); //error
        }
        else
        {
            Form1 form1 = new Form1();
            form1.Show();
        }            
    }

2 个答案:

答案 0 :(得分:1)

你做不到。调用特定于Winforms控件,因为它将消息输入Windows消息泵以执行您需要执行的任何操作。因此,在您的自定义类中,显然没有Message Pump,这是不可能的。

答案 1 :(得分:0)

我得到答案

在线程中我可以调用form1.ShowDialog();它不会显示为Dialog,因为它在另一个线程中

新代码

void call_thread()
    {

        Thread t = new Thread(new ThreadStart(this.ShowForm1));
        t.Start();

    }

    private void ShowForm1()
    {            
           Form1 form1 = new Form1();
            form1.ShowDialog();

    }