我在VS2005 C# .net framework2.0下一个解决方案中创建了3个项目,分别是:登录,A子系统,B子系统.
现在我想通过登录项目控制进入A系统或B系统,然后A系统或B系统还能够注销返回登录.
问题是,现在我能通过在登录中添加对A和B的引用,并且创建新线程实现从登录到A或B子系统的操作.
但是当从A或B注销返回登录是却怎么也不行了,我想在A和B中添加对登录的引用告诉我不可以循环引用,这样也就不能在A和B中用同样的创建线程方式来实现返回登录窗口.
我试了传递参数的方式,但是告诉我Login窗口不是该线程创建的不能访问(类似这样的提示,具体的忘记了)
到了这里我就不会弄了,麻烦各位高手指点小弟一下,不胜感激.

解决方案 »

  1.   

          登陆中添加对A和B的引用之后,再在A中添加到登陆引用会是死循环,因此会提示错误!这样:     登陆中不要添加到A和B的引用,A和B也不要添加对登陆的引用。  
         登陆按钮:
                private void button1_Click(object sender, EventArgs e)
            {
                //加载项目A的程序集信息(注意文件的正确路径)
                System.Reflection.Assembly assmbly = System.Reflection.Assembly.LoadFile(System.AppDomain.CurrentDomain.BaseDirectory +  "\\WindowsFormsApplication2.exe");
                this.Hide();
                //反射,创建A项目的开始窗体。
                Form form = (Form)assmbly.CreateInstance("WindowsFormsApplication2.Form1");
                //注册事件,使得窗体关闭时候显示登录窗体。因此A项目的注销只需要关闭A项目的Form1即可!
                form.FormClosed += new FormClosedEventHandler(form_FormClosed);
                form.Show();
            }        void form_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.Show();
            }
    注意把A系统的exe文件拷贝到登陆debug/debug底下,上边的代码测试通过!
      

  2.   

    A,和B 子系统需要同时显示吗?如果不需要,可以使用模式对话框,ShowDialog。不用使用线程。
      

  3.   

    问题解决了... 昨天脑子犯糊涂了,非得调用A,B的Main()函数来进入A,B系统. 
    其实可以直接创建一个A系统MainFrm的实例来进入.
    然后用2楼的事件//注册事件,使得窗体关闭时候显示登录窗体。因此A项目的注销只需要关闭A项目的Form1即可! 
                form.FormClosed += new FormClosedEventHandler(form_FormClosed); 可以完成返回登录.但是上面大家都说用ShowDialog,我这里用Show也是没有问题的啊,有什么不同么?麻烦大家再给小弟解释一下...