想写个c#小程序,主要功能是程序打开后在文本框中显示传进来的参数,禁止二次启动!当二次时程序时,将二次启动的参数传进来显示在文本框中。注:不管启动多少次,窗体只显示一个,只是文本框 内容改变。以下是我写的main方法:        static void Main(string [] txt)
        {            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            
            bool newWm;
            Form1 fm = new Form1();
            Mutex mu = new Mutex(true, "wm", out newWm); //对第二次运行进行限制
           //如果第一次启动,将传进来的值显示在文本框中
            if (newWm)
            {
                fm.setTxt(txt);
                Application.Run(fm);              
            }
            else//禁止二次启动,只接收启动时的参数,显示在文本框中
            {
                fm.setTxt(txt);
                Application.Run(fm); 
            }                      
        }以下是Form1中setTxt方法:
 
        public void setTxt(string[] txt)
        {
            if (txt.Length > 0)
            {
                textBox1.Text = txt[0];
                MessageBox.Show(txt[0]);//二次启动后,参数能取,但不能显示在文本框内
            }
        }
这样做了后,虽然,禁止了二次启动取到了参数,但不能把内容 显示在文本框内,想了很久找不到方法解决。请教高手指点。在此感激不尽!谢谢C#单例禁止多开控制台传参

解决方案 »

  1.   


       else//禁止二次启动,只接收启动时的参数,显示在文本框中
                {
                    fm.setTxt(txt);
                    Application.Run(fm); 
                } 
    要禁止二次启动,这样是不行的,
    你得找回第一次启动的窗口,把参数传给它,然后自己直接退出,
    不能用Application.Run(fm)来显示的。
      

  2.   

    else里的run是之后添加的,实际是没的run的          else//禁止二次启动,只接收启动时的参数,显示在文本框中        
                {                
                 fm.setTxt(txt);                
              }   
      

  3.   

    使用api查找窗体和textbox控件,然后给控件赋值。
      

  4.   

    sendmessage 发送参数到文本框
      

  5.   

    这不叫什么单例。是否打开了其它进程,可以使用Process查询当前进程。而通讯,可以使用注册表通讯,也可以使用通讯端口来判断(例如第一个能够占用12345端口的进程可以监听,其它进程必定无法占用此端口,但是可以给监听进程发消息),也可以使用共享内存来达到与注册表等一样的多进程共享“白板”一起广播和通讯的功能。实际上多个进程之间协调,做法很多很多。关键是你要有一点通讯的经验。