日期:2014-05-18 浏览次数:21210 次
namespace WinAppThreadSuspendTest
{
    public partial class Form1 : Form
    {
        private static Thread currentThread;
        public static Thread CurrentThread
        {
            get { return currentThread; }
        }
        public Form1()
        {
            InitializeComponent();
            InitCurrentThread();
        }
        private static void InitCurrentThread()
        {
            currentThread = Thread.CurrentThread;
        }
        private void button1_Click(object sender, EventArgs e)
        {            
            Form2 frm2 = new Form2();
            frm2.Show();
            currentThread.Suspend();
            MessageBox.Show("Suspended thread resume");
        }
    }
}
namespace WinAppThreadSuspendTest
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private void btnOK_Click(object sender, EventArgs e)
        {
            Form1.CurrentThread.Resume();
            this.Close();
        }
    }
}
        private static Thread MainThread;
        private static Frm_Login3 LoginForm;
        private static bool pass = false;
        public static Form ShowLoginForm(Type MainFormType, string description)
        {
            Form f = null;
            MainThread = Thread.CurrentThread;
            Thread t2 = new Thread(new ParameterizedThreadStart(CreateLoginForm));//创建登录线程
            t2.Start(description);//启动登录线程
            try
            {
                MainThread.Join();//挂起主线程,登录成功后在登录窗体上调用 MainThread.Interrupt();恢复主线程
            }
            catch
            {
            }
            if (pass)//pass:是否登录成功
            {
                try
                {
                    f = (Form)Activator.CreateInstance(MainFormType);//创建主窗体
                    LoginForm.Invoke(new MethodInvoker(CloseLoginForm));//关闭登录窗体
                }
                catch(Exception ex)
                {
                    gt.WinForm.ShowMessage.Error(ex);
                    f = null;
                }
            }
            return f;
        }
        private static void CloseLoginForm()
        {
            LoginForm.Close();
        }
        private static void CreateLoginForm(object obj)
        {
            LoginForm = new Frm_Login3();
            LoginForm.Description = obj.ToString();           
            LoginForm.ShowDialog();
        }