我的C#程序是被一个VB程序调用的 vb中用的是shell函数 
 我在static void Main(string[] args)
这接受参数 然后做了些判断 参数接受也没问题
这是如果在判断之后 不用MessageBox.show()一下
主界面程序就显示不出来
看进程已经启动了 请教下高手原因。

解决方案 »

  1.   


    static void Main(string[] args) 
    {

    Process instance   =   RunningInstance();   
    if   (instance==null)   
    {   
    if(args.Length==0)
    {
    MessageBox.Show("直接启动禁止。","Message",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    Application.Exit();
    }
    else
    {
    if(args[0].ToString()!="Computer")
    {
    MessageBox.Show("验证错误。","Message",MessageBoxButtons.OK,MessageBoxIcon.Warning);
      Application.Exit();
    }
    else
    {
    MainSetting.NetUse(); 
    try
    {  
    //MessageBox.Show(args[0].ToString());
    saright.Name=args[1].ToString();
    saright.Number=args[2].ToString();
    saright.Level=Convert.ToInt16(args[3].ToString());
    // MessageBox.Show("成功启动。"); 没有这个下面的Run函数之后 程序界面显示不出来   很奇怪。
    Application.Run(new MainFrm());
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message,"ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error);
    }

    }

    }   
    else   
    {   
    MessageBox.Show("多次启动。","Message",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    Application.Exit();    
    }   

    } public   static   Process   RunningInstance()   
    {   
    Process   current   =   Process.GetCurrentProcess();   
    Process[]   processes   =   Process.GetProcessesByName(current.ProcessName);    
    foreach   (Process   process   in   processes)   
    {   
    if   (process.Id   !=   current.Id)   
    {  
    if   (Assembly.GetExecutingAssembly().Location.Replace("/","\\")==current.MainModule.FileName)   
    {   
    return   process;   
    }   
    }   
    }        
    return   null;   
    }  
      

  2.   


    try
                            {          
                                //MessageBox.Show(args[0].ToString());
                                saright.Name=args[1].ToString();
                                saright.Number=args[2].ToString();
                                saright.Level=Convert.ToInt16(args[3].ToString());    
                            //    MessageBox.Show("成功启动。");    没有这个下面的Run函数之后 程序界面显示不出来   很奇怪。
                                //Application.Run(new MainFrm());
                            MainFrm myMainFrm = new MainFrm();
                            myMainFrm.ShowDialog();
                            }
      

  3.   

    三楼说的对。
         //Application.Run(new MainFrm());
                            MainFrm myMainFrm = new MainFrm();
                            myMainFrm.ShowDialog();
    这三句是关键。第一句注销,改为后两句就对了
      

  4.   

    把Application.Run(new MainFrm());
    改成
    mainfrm = new MainFrm();
    Application.Run(mainfrm);
    mainfrm.show();
    试试
      

  5.   

    不好意思  问题还是没有解决。
    还是和之前一样 
    这样的话能显示出来 
    try
                            {          
                                MessageBox.Show(args[0].ToString());//先显示下就能出来界面了
      晕了
                                saright.Name=args[1].ToString();
                                saright.Number=args[2].ToString();
                                saright.Level=Convert.ToInt16(args[3].ToString());    
                            //    MessageBox.Show("成功启动。");    没有这个下面的Run函数之后 程序界面显示不出来   很奇怪。
                                //Application.Run(new MainFrm());
                            MainFrm myMainFrm = new MainFrm();
                            myMainFrm.ShowDialog();
                            }
      

  6.   

    问题基本解决了,多亏一个同事的提醒。
    在这也和大家分享下经验,
    我在private void MainFrm_Load(object sender, System.EventArgs e)
    {
    this.Visible=true; //加上这个。。
                             。。
                           //
                    )
    非常感谢楼上的几位。
    接下来开始散分,欢迎大家继续发言。
    明天上班结贴。