多线程中使用Invoke出现重复操作怎么解决?
有A,B,C三个窗口
A是一个初始化时候loading的窗口,B是一个注册窗口,C是主窗口
业务逻辑是程序初始化时候先显示A,然后判断是否注册分别显示B或者C。B窗口成功注册后显示C
Program.cs中的代码是
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); A a= new A(); if (a.ShowDialog() == DialogResult.OK) { Application.Run(new C()); } else { B b= new B(); if (b.ShowDialog() == DialogResult.OK) { Application.Run(new C()); } }
delegate void RegCheckCallBack(); public InitForm() { InitializeComponent(); MyInit(); } public void MyInit() { #region 解决“当初始化时候切换窗口会抛出 线程间操作无效 的错误” //Control.CheckForIllegalCrossThreadCalls = false; //最简单方法 进行非安全线程访问时,运行环境就不去检验它是否是线程安全的 #endregion ThreadStart threadStart = new ThreadStart(RegCheck);//通过ThreadStart委托执行注册检测 Thread thread = new Thread(threadStart); thread.Start(); } private void RegCheck() { if (this.InvokeRequired) { RegCheckCallBack rccb = new RegCheckCallBack(RegCheck); this.Invoke(rccb); } else { bool chkResult = Bll.check(); if (chkResult) { this.DialogResult = DialogResult.OK; C c = new C(); c.Show(); this.Visible = false; } else { this.DialogResult = DialogResult.No; B b = new B(); b.Show(); this.Visible = false; } } }