我用的是Mdi窗口,有一个主窗口MainForm,两个子窗口FrmA和frmB,frmA打开frmB,要实现show()后面的代码不执行,不能使用showDialog,因为如果使用showDialog的话,那么MainForm里面其他窗口和控件都不能获得焦点
现在用了线程阻止的方式实现,有一个问题,看下面的方法,当form窗口打开后,里面获得焦点的texbox的光标不会闪,或者说闪得很慢,有无办法解决?,关闭waitOne中的毫秒数也不行,一样不能流畅闪动,还是会卡很久
   
public static void ShowMyDialg(Form form)
        {
            using (System.Threading.ManualResetEvent mRest = new System.Threading.ManualResetEvent(false))
            {
                form.FormClosed += delegate(object sender, FormClosedEventArgs e) { mRest.Set(); };
                form.Show();
                while (!mRest.WaitOne(30))
                {
                    Application.DoEvents();
                }
                //这里的代码只有当form关闭后才能执行
                mRest.Close();
                MessageBox.Show("窗口已关闭!");
            }
        }

解决方案 »

  1.   

    建议你不要用类似阻止线程运行的方法用这种
    form.FormClosed +=new FormClosedEventArgs (AfterClose);private void AfterClose(object sender, FormClosedEventArgs e)
    {
      //form关闭后执行的代码
    }
      

  2.   

    就是有一个主窗口MainForm(MDI主窗口),有很多子窗口,打开其中的A、B两个窗口
    ,A窗口上点击一个按钮弹出C窗口
    ,C窗口不关闭的话不能操作A,但是可以操作MainForm和其他子窗口,如B窗口,C一直要相对A置顶
    ,当C窗口关闭后把C窗口中选择的一些数据带到A窗口中
    ,当然在其他子窗口里面也可以打开C窗口,控制与上面相同其实我是大概想达到这样的效果,在打开C窗口的方法里面,c.show()后面的代码要在c关闭后再执行