需求如下:
我有一个Login.cs登录窗体,一个Main.cs主窗体,有一个窗体WatchKey.cs是一个提示信息窗体,这是用来检测一个USB设备的,每5秒检测一次(我现在做的是把它做为一个后台线程启动的)。我想要实现的就是在程序的生命周期内(包括登录时),我这个WatchKey线程都是在运行着的。然后如果每5秒/次的检测中,没有检测的,我就要把WatchKey窗体给ShowDialog出来,主线程不可操作(在登录时,登录窗体不能操作,在主窗体时,主窗体也不可操作)请问下,应该如何去做?

解决方案 »

  1.   

    利用委托,在线程执行的方法里面调用methodvoid method()
    {
        if (this.InvokeRequired)
                {
                    MethodInvoker me = new MethodInvoker(ShowForm);
                    Invoke(me);
                }
    }
    void ShowForm()
            {
                Form1 f = new Form1();
                f.ShowDialog();
            }
      

  2.   

            private void button3_Click(object sender, EventArgs e)
            {
                new Thread(() =>
                    {
                        this.Invoke((Action)(() =>
                            {
                                MessageBox.Show("Test");
                            }));
                    }).Start();
            }就是你的意思吧。
    简单说。
    this.Invoke((Eventhandler)delegate
    {
        MessageBox.Show("test");
    });这样就可以了。如果你不是在窗体线程。也容易。Form.FromHandle(Process.GetCurrentProcess().MainWindowHandle).Invoke((Eventhandler)delegate
    {
        MessageBox.Show("test");
    });