在frmUserGroupList界面中        private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
        {
            Thread td = new Thread(delegate() { FormWait fw = new FormWait(); fw.ShowDialog(); });
            td.Start();
            BindUserList();//加载数据
            td.Abort();
        }我想要实现在执行SelectedIndexChanged事件的时候 弹出FormWait界面
并且一直在最前面就是 ShowDialog(); 这样子的
但是我鼠标点到frmUserGroupList界面时FormWait跑下面去了。
怎么样才能让 FormWait 一直在最前面
感谢

解决方案 »

  1.   

    fw.ShowDialog(); 不能用ShowDialog 因为会停止执行下面的代码 至少到关闭该窗体为止
    你用 fw.Show(this);试试
      

  2.   

    FormWait fw = new FormWait(); 
    fw.TopMost = true;
    new Thread(delegate()
    {
        Application.Run(fw);
    }).Start();
    BindUserList();//加载数据
    fw.Close();
      

  3.   

    fw在主线程执行才能起到模式对话框的作用。
    BindUserList方法放到子线程执行,子线程结束后关闭fw
      

  4.   

    fw.ShowDialog(this); 

    fw.Show(this); 
    都看不到FormWait界面
    继续等待。
      

  5.   

    这样第一次执行的时候合适的但是在此执行
    提示
    无法访问已释放的对象。
    对象名:“FormWait”。
      

  6.   

    主界面放个panel  然后在里面设计等待提示   线程里控制panel的Visible进行显示   这样还可以在panel里显示等待动画与进度等    这个保证有效  嘿嘿   我常用这个
      

  7.   


    都哪跟哪啊。都是局部变量,哪来的第一次第二次。每次都new出来的。点100次也是一样的。你要是挪到外面,成员变量了,那能不出问题?
    private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
    {
    FormWait fw = new FormWait(); 
    fw.TopMost = true;
    new Thread(delegate()
    {
    Application.Run(fw);
    }).Start();
    BindUserList();//加载数据
    fw.Close();
    }
      

  8.   

    放panel
    在加载数据多的时候 看着好像程序死了
    多线程可以给客户比较好的体验
    不过也谢谢 CoolieMan 的意见
      

  9.   


            private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
            {
                FormWait fw = new FormWait();
                fw.TopMost = true;
                new Thread(delegate()
                {
                    if (fw == null)
                        fw = new FormWait();
                    Application.Run(fw);
                }).Start();
                for (int i = 0; i < 200; i++)
                {
                    BindUserList();//加载数据
                }
                fw.Close();
            }
    我是放在里面的
      

  10.   

    显然不会有任何问题。除非你的FromWait有问题。你可以用Form替代FormWait试试。
      

  11.   


            private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
            {
                Form fw = new Form();
                fw.TopMost = true;
                new Thread(delegate()
                {
                    Application.Run(fw);
                }).Start();
                for (int i = 0; i < 200; i++)
                {
                    BindUserList();//加载数据
                }
                fw.Close();
            }我放Form 怎么还是提示
    无法访问已释放的对象。
    对象名:“Form”。 呢?
      

  12.   

    BindUserList最好是在子线程执行,用委托和事件通知主窗体更新,这样体验好点但比较麻烦。
    如果你的BindUserList方法一定要在主线程执行,而且fw要显示,那就都放主线程。可以试下改成下面的。
    FormWait fw = new FormWait();
    fw.Shown += new EventHandler(fw_Shown);
    fw.ShowDialog();
    void fw_Shown(object sender, EventArgs e)
    {
    Application.DoEvents();
    BindUserList();//加载数据
    Form form = sender as Form;
    form.Close();
    }
    执行BindUserList这个耗时方法时,主线程繁忙,fw只要显示就可以,不一定要ShowDialog
      

  13.   

    不好意思,是我没注意,这样跨线程操作了。private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
    {
        FormWait fw = new FormWait(); 
        fw.TopMost = true;
        new Thread(delegate()
        {
            Application.Run(fw);
        }).Start();
        BindUserList();//加载数据
        fw.Invoke((EventHandler)delegate{fw.Close();});
    }
      

  14.   


    private void button2_Click(object sender, EventArgs e)
    {
        Form wait = new Form();
        wait.TopMost = true;
        new Thread((ThreadStart)delegate
            {
                Application.Run(wait);
            }).Start();
        int tick = Environment.TickCount;
        while (Environment.TickCount - tick < 5000)
        {
            this.Text = ((Environment.TickCount - tick) / 1000).ToString();
        }
        wait.Invoke((EventHandler)delegate{wait.Close();});
    } 应该不会错了,vs2008测试通过。
      

  15.   

    恩 OK了
    谢谢
    zzx509 和 wuyazhe
    帮助^_^