日期:2014-05-17  浏览次数:21215 次

C# 打开一个显示状态的不可关闭对话框,后台程序继续运行??
我想实现的是在Form1 button1的执行函数中,想显示一个显示正在执行什么操作的对话框FORM3,该对话框没有任何按钮,不可关闭,,,button1函数继续执行到一定条件,使该Form3显示的文字变化,并显示Form3中的退出按钮。

Form1 button1的执行函数中 新建一个线程 
f_Thread = new Thread(MyThread_Funciton);
ChaosThreadList.Add(f_Thread);
f_Thread.Start();
线程的执行函数是:这样避免了Form3的一闪而过,
private void MyThread_Funciton()
        {
            MethodInvoker mi = new MethodInvoker(this.ShowForm3);
            this.BeginInvoke(mi);  
        }
 private void  ShowForm3()  
        {
            //Form3 form_3 = new Form3();
            form_3.Show();  
        }
问题:若Form1 button1中建完线程就结束,则显示Form3窗体,可以在主窗体其他按钮的函数中,隐藏Form3.。但是若Form1 button1中建完线程还有代码继续执行,并在代码中得出Form3隐藏的条件并执行,
则Form3窗体不显示???代码运行到后面,显示了Form3窗体---文字变化,并显示Form3中的退出按钮。。如何才能使从建完新线程,Form3就显示呢????

------解决方案--------------------
定时器,判断Application.OpenForms中有没有Form3,没有创建显示,有但是没有显示,就显示。
------解决方案--------------------
你用子线程打开,并显示,是使用的Show,show的函数执行以后,代码继续执行,这时你的子线程执行完成,即销毁,所以show的窗体不显示,你可以使用ShowDialog
------解决方案--------------------
卡是因为你使用了Invoke,这样相当于还是主线程来操作的界面元素,线程一直在运行其他的处理,没有时间响应你的界面更新